import java.io.*; import java.math.*; import java.security.*; import java.text.*; import java.util.*; import java.util.concurrent.*; import java.util.function.*; import java.util.regex.*; import java.util.stream.*; import static java.util.stream.Collectors.joining; import static java.util.stream.Collectors.toList; public class Solution { // Complete the solve function below. static String solve(List<List<Integer>> board) { int[][] moves = new int[][]{{0, 1}, {0, -1}, {-1, 0}, {1, 0}}; int N = board.size(); for(int i = 0; i < N; i++) { for(int j = 0; j < N; j++) { for(int[] move : moves) { int di = move[0]; int dj = move[1]; int ni = i + di; int nj = j + dj; if(ni >= 0 && ni < N && nj >= 0 && nj < N) { if(board.get(i).get(j) == board.get(ni).get(nj)) return "No"; } } } } return "Yes"; } public static void main(String[] args) throws IOException { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH"))); int t = Integer.parseInt(bufferedReader.readLine().trim()); IntStream.range(0, t).forEach(tItr -> { try { int n = Integer.parseInt(bufferedReader.readLine().trim()); List<List<Integer>> board = new ArrayList<>(); IntStream.range(0, n).forEach(i -> { try { board.add( Stream.of(bufferedReader.readLine().replaceAll("\\s+$", "").split(" ")) .map(Integer::parseInt) .collect(toList()) ); } catch (IOException ex) { throw new RuntimeException(ex); } }); String result = solve(board); bufferedWriter.write(result); bufferedWriter.newLine(); } catch (IOException ex) { throw new RuntimeException(ex); } }); bufferedReader.close(); bufferedWriter.close(); } }