import java.io.OutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.util.Arrays; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; import java.io.Writer; import java.io.OutputStreamWriter; import java.io.BufferedReader; import java.io.InputStream; /** * Built using CHelper plug-in * Actual solution is at the top * * @author lewin */ public class ytbj2_lewin { public static void main(String[] args) { InputStream inputStream = System.in; OutputStream outputStream = System.out; InputReader2 in = new InputReader2(inputStream); OutputWriter out = new OutputWriter(outputStream); YouBeTheJudge2 solver = new YouBeTheJudge2(); solver.solve(1, in, out); out.close(); } static class YouBeTheJudge2 { public void solve(int testNumber, InputReader2 in, OutputWriter out) { int n = in.nextInt(); int side = 1 << n; int colors = ((1 << (2 * n)) - 1) / 3; int[][] grid = new int[side][]; for (int i = 0; i < side; i++) { grid[i] = in.readIntArray(side); } int[] freq = new int[colors + 1]; for (int i = 0; i < side; i++) { for (int j = 0; j < side; j++) { freq[grid[i][j]]++; } } for (int i = 1; i <= colors; i++) { if (freq[i] != 3) { out.println(0); return; } } for (int i = 0; i + 1 < side; i++) { for (int j = 0; j + 1 < side; j++) { int[] c = {grid[i][j], grid[i + 1][j], grid[i][j + 1], grid[i + 1][j + 1]}; Arrays.sort(c); if (c[1] == c[2] && (c[0] == c[1] || c[2] == c[3])) { int color = c[1]; if (grid[i][j] == color) grid[i][j] = 0; if (grid[i + 1][j] == color) grid[i + 1][j] = 0; if (grid[i][j + 1] == color) grid[i][j + 1] = 0; if (grid[i + 1][j + 1] == color) grid[i + 1][j + 1] = 0; } } } for (int i = 0; i < side; i++) { for (int j = 0; j < side; j++) { if (grid[i][j] != 0) { out.println(0); return; } } } out.println(1); } } static class OutputWriter { private final PrintWriter writer; public OutputWriter(OutputStream outputStream) { writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(outputStream))); } public OutputWriter(Writer writer) { this.writer = new PrintWriter(writer); } public void close() { writer.close(); } public void println(int i) { writer.println(i); } } static class InputReader2 { private BufferedReader in; private StringTokenizer st; public InputReader2(InputStream stream) { in = new BufferedReader(new InputStreamReader(stream)); st = null; } public int[] readIntArray(int tokens) { int[] ret = new int[tokens]; for (int i = 0; i < tokens; i++) { ret[i] = nextInt(); } return ret; } public int nextInt() { return Integer.parseInt(next()); } public String next() { while (st == null || !st.hasMoreTokens()) { try { st = new StringTokenizer(in.readLine()); } catch (IOException e) { e.printStackTrace(); } } return st.nextToken(); } } }