import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
import java.io.*; 
import java.util.*; 

public class CFTemplate {
	
	
	public static void main(String[] args) {
		UsefulScanner us = new UsefulScanner();
		int cases = us.getInt();
		
		for(int i = 0; i < cases; i++) {
			
			
			int gridSize = us.getInt();
			
			
			char[][] grid = new char[gridSize][gridSize];
			
			for(int j = 0; j < gridSize; j++) {
				grid[j] = us.getCharArray();
			}
			
			
			if(grid[0][1] == grid[1][0]) {
				if(grid[2][0] == grid[1][1] && grid[1][1] == grid[0][2]) {
					if(grid[0][1] == grid[2][0]) {
						
						System.out.println("2");
						System.out.println("1 2");
						System.out.println("2 1");
					}
					else {
						System.out.println("0");
					}
					
				}
				else {
					int counter = 0;
					ArrayList<Integer> x = new ArrayList<Integer>();
					ArrayList<Integer> y = new ArrayList<Integer>();
					if(grid[2][0] == grid[0][1]) {
						counter++;
						x.add(3);
						y.add(1);
					}
					if(grid[1][1] == grid[0][1]) {
						counter++;
						x.add(2);
						y.add(2);
					}
					if(grid[0][2] == grid[0][1]) {
						counter++;
						x.add(1);
						y.add(3);
					}
					
					
					System.out.println(counter);
					for(int k = 0; k < x.size(); k++) {
						System.out.println(x.get(k) + " " + y.get(k));
					}
					
				}
				
				
			}
			else {
				ArrayList<Integer> xSame0 = new ArrayList<Integer>();
				ArrayList<Integer> xSame1 = new ArrayList<Integer>();
				ArrayList<Integer> ySame1 = new ArrayList<Integer>();
				ArrayList<Integer> ySame0 = new ArrayList<Integer>();
				
				if(grid[0][1] == grid[2][0]) {
					xSame0.add(3);
					ySame0.add(1);
				}
				else {
					xSame1.add(3);
					ySame1.add(1);
				}
				if(grid[0][1] == grid[1][1]) {
					xSame0.add(2);
					ySame0.add(2);
				}
				else {
					xSame1.add(2);
					ySame1.add(2);
				}
				
				if(grid[0][1] == grid[0][2]) {
					xSame0.add(1);
					ySame0.add(3);
				}
				else {
					xSame1.add(1);
					ySame1.add(3);
				}
				
				
				if(xSame1.size() > xSame0.size()) {
					System.out.println(xSame0.size() + 1);
					
					System.out.println("1 2");
					
					for(int j = 0; j < xSame0.size(); j++) {
						System.out.println(xSame0.get(j) + " " + ySame0.get(j));
					}
					
					
				}
				
				
				else {
					System.out.println(xSame1.size() + 1);
					
					System.out.println("2 1");
					
					for(int j = 0; j < xSame1.size(); j++) {
						System.out.println(xSame1.get(j) + " " + ySame1.get(j));
					}
					
				}
					
				}
				
				
				
				
			}
			
	}
}
		
		
		
		
		
		/*int cases = us.getInt();
		
		for(int i = 0; i < cases; i++) {
			int n = us.getInt();
			int a = us.getInt();
			int b = us.getInt();
			int da = us.getInt();
			int db = us.getInt();
			int[][] edges = new int[n-1][2];
			for(int j = 0; j < n-1; j++) {
				edges[j][0] = us.getInt();
				edges[j][1] = us.getInt();
			}
			ArrayList<ArrayList<Integer>> eg = new ArrayList<ArrayList<Integer>>();
			
			
			for(int j = 0; j < n; j++) {
				ArrayList<Integer> temp = new ArrayList<Integer>();
				eg.add(temp);
			}
			for(int j = 0; j < n-1; j++) {
				eg.get(edges[j][0]).add(edges[j][1]);
				eg.get(edges[j][1]).add(edges[j][0]);
			}
			
			
			if(getWidth(eg) <= 2*da) {
				System.out.println("ALICE");
				
				
			}
			
			else if(getDistance(a, b, eg) < da) {
				System.out.println("ALICE");
			}
			
			else if(db < 2*da + 1) {
				System.out.println("ALICE");
				
			}
			
			else {
				System.out.println("BOB");
			}
			
			
			
			
			
			
			
			
		}
		
		
		
		
		
		
		
		
		
		
		
	}
	
	static int getDistance(int a, int b, ArrayList<ArrayList<Integer>> eg) {
		int[] change = new int[1];
		
		
		for(int j = 0; j < eg.get(a).size(); j++) {
			if(eg.get(a).get(j) == b) {
				return 1;
			}
			else {
				dfs(eg.get(a).get(j), b, eg, a, 1, change, false);
			}
		}
		return change[0];
		
		
	}
	
	
	static void dfs(int a, int b, ArrayList<ArrayList<Integer>> eg, int parent, int depth, int[] change, boolean found)  {
		if(!found) {
			for(int j = 0; j < eg.get(a).size(); j++) {
				if(eg.get(a).get(j) == b) {
					change[0] = depth+1;
					found = true;
					break;
				}
				else if(eg.get(a).get(j) != parent) {
					dfs(eg.get(a).get(j), b, eg, a, depth + 1, change, found);
				}
			}
		}
	}
	static int getWidth(ArrayList<ArrayList<Integer>> eg) {
		int[] maxvertex = {0};
		int[] max = {0};
		for(int j = 0; j < eg.get(0).size(); j++) {
			dfs2(eg.get(0).get(j), eg, 0, 1, max, maxvertex);
		}
		for(int j = 0; j < eg.get(maxvertex[0]).size(); j++) {
			dfs2(eg.get(maxvertex[0]).get(j), eg, 0, 1, max, maxvertex);
		}
		
		
		return max[0];
		
		
		
	}
	
	static void dfs2(int a, ArrayList<ArrayList<Integer>> eg, int parent, int depth, int[] max, int[] maxvertex) {
		if(eg.get(a).size() == 1) {
			if(depth > max[0]) {
				max[0] = depth;
				maxvertex[0] = a;
			}
		}
		
		for(int j = 0; j < eg.get(a).size(); j++) {
	
			if(eg.get(a).get(j) != parent) {
				dfs2(eg.get(a).get(j), eg, a, depth + 1, max, maxvertex);
			}
		}
	}
	*/
	
		
		

	
	

	


class UsefulScanner{
	
	
	
	Scanner sc;
	String currentLine = "";
	int numLines;
	int lineCounter;
	
	public UsefulScanner() {
		
		sc = new Scanner(System.in);
		
		
		
	}
	
	
	
	ArrayList<Integer> getLineOfIntsList() {
		update();
		String str = currentLine;
		ArrayList<Integer> output = new ArrayList<Integer>();
		while(!str.isEmpty()) {
			if(str.contains(" ")) {
				
				output.add(Integer.parseInt(str.substring(0, str.indexOf(" "))));
				str = str.substring(str.indexOf(" ") + 1, str.length());
			}
			else {
				output.add(Integer.parseInt(str));
				str = "";
				currentLine = "";
			}
		}
		
		return output;
	}
	
	
	void update() {
		if(currentLine.isEmpty()) {
			currentLine = sc.nextLine();
		}
	}
	
	
	int getInt() {
		update();
		if(currentLine.contains(" ")) {
			String s = currentLine.substring(0, currentLine.indexOf(" "));
			currentLine = currentLine.substring(currentLine.indexOf(" ") + 1, currentLine.length());
			return Integer.parseInt(s);
		}
		int x = Integer.parseInt(currentLine);
		currentLine = "";
		return x;
		
		
	}
	
	
	char[] getCharArray() {
		update();
		int length = currentLine.length();
		
		char[] output = new char[length];
		
		for(int i = 0; i < length; i++) {
			output[i] = currentLine.charAt(i);
		}
		
		currentLine = "";
		return output;
	}
	
	
	
	String getLine() {
		String s = currentLine;
		currentLine = "";
		return s;
	}
	String getBlock() {
		update();
		
		if(currentLine.contains(" ")) {
			String s = currentLine.substring(0, currentLine.indexOf(" "));
			currentLine = currentLine.substring(currentLine.indexOf(" ") + 1, currentLine.length());
			return s;
		}
		String s = currentLine;
		currentLine = "";
		return s;
	}
	
	int[] getIntArray() {
		ArrayList<Integer> outputList = getLineOfIntsList();
		int[] output = new int[outputList.size()];
		for(int i = 0; i < outputList.size(); i++) {
			output[i] = outputList.get(i);
		}
		return output;
		
	}
	
	String nextLine() {
		lineCounter++;
		if(lineCounter <= numLines) {
			return sc.next();
		}
		else return "";
		
	}
	
	void next() {
		currentLine = sc.next();
	}
	
	
	
}