using System.Collections.Generic;
public static void Main()
int testcase = Convert.ToInt32(Console.ReadLine());
for(int i = 0; i < testcase; i++)
int row = Convert.ToInt32(Console.ReadLine());
int col = Convert.ToInt32(Console.ReadLine());
char[][] map = new char[row][];
for(int j = 0; j < row; j++) {
map[j] = Console.ReadLine().ToCharArray();
private static void printMapRegionSummaries(int row, int col, char[][] map) {
bool[][] visited = new bool[row][];
List<KeyValuePair<int, int>> armiesLocation = new List<KeyValuePair<int,int>>();
Dictionary<char, int> regionsControlled = new Dictionary<char, int>();
for(int i = 0; i < row; i++) {
bool[] visitedCols = new bool[col];
for(int j = 0; j < col; j++) {
visitedCols[j] = (map[i][j] == '#');
if(map[i][j] != '.' || map[i][j] != '#') {
armiesLocation.Add(new KeyValuePair<int, int>(i,j));
visited[i] = visitedCols;
for(int x = 0; x < armiesLocation.Count; x++) {
int initRow = armiesLocation[x].Key;
int initCol = armiesLocation[x].Value;
bool isContested = isContestedRegion(map, visited, initRow, initCol);
private static bool isContestedRegion(char[][] map, bool[][] visited, int currRow, int currCol) {
if(!visited[currRow][currCol]) {
Queue<KeyValuePair<int,int>> bfsQueue = new Queue<KeyValuePair<int,int>>();
bfsQueue.Enqueue(new KeyValuePair<int,int>(currRow, currCol));