#include <bits/stdc++.h>   using namespace std;   int a[55][55];   const int MAX = 1e3 + 5;   const int INF = 0x3f3f3f3f;   int color;   int A[MAX][MAX];   int A1[MAX][MAX], A2[MAX][MAX];   int N;   int DX[2] = {0, 1}, DY[2] = {1, 0};   int NOW1[4], NOW2[4];   int X1, Y1, X2, Y2;   bool FLAG = false;   bool VIS[MAX][MAX];   void dfs(int x, int y, int count) {     if (FLAG) return;     if (count == 4) {       if (NOW1[1] == NOW1[2] && NOW1[0] == NOW1[3]) {         if (NOW2[1] != NOW2[2] || NOW2[0] != NOW2[3]) {           FLAG = true;           X2 = x, Y2 = y;           color = 1;           return;         }       }       if (NOW2[1] == NOW2[2] && NOW2[0] == NOW2[3]) {         if (NOW1[1] != NOW1[2] || NOW1[0] != NOW1[3]) {           FLAG = true;           X2 = x, Y2 = y;           color = 2;           return;         }       }       return;     }     for (int i = 0; i < 2; ++i) {       int numX = x + DX[i];       int numY = y + DY[i];       if (numX >= 1 && numX <= N && numY >= 1 && numY <= N && !VIS[numX][numY]) {         NOW1[count] = A1[numX][numY];         NOW2[count] = A2[numX][numY];         VIS[numX][numY] = true;         dfs(numX, numY, count + 1);         VIS[numX][numY] = false;       }     }   }   void solve() {     for (int i = 1; i <= N; ++i) {       for (int j = 1; j <= N; ++j) {         A[i][j] = a[i][j];         if ((i + j) & 1) {           if (A[i][j] == 0)             A1[i][j] = 1, A2[i][j] = 0;           else             A1[i][j] = 0, A2[i][j] = 1;         } else           A1[i][j] = A2[i][j] = A[i][j];       }     }     for (int i = 1; i <= N; ++i) {       for (int j = 1; j <= N; ++j) {         NOW1[0] = A1[i][j];         NOW2[0] = A2[i][j];         VIS[i][j] = true;         dfs(i, j, 1);         VIS[i][j] = false;         if (FLAG) {           X1 = i, Y1 = j;           return;         }       }     }   }   int main() {     int n, t;     scanf( %d , &n);     N = n;     a[1][1] = 1;     a[1][2] = 0;     a[n][n] = 0;     printf( ? %d %d %d %d n , 1, 2, 2, 3);     fflush(stdout);     scanf( %d , &t);     if (t == 1)       a[2][3] = a[1][2];     else       a[2][3] = a[1][2] ^ 1;     printf( ? %d %d %d %d n , 2, 1, 2, 3);     fflush(stdout);     scanf( %d , &t);     if (t == 1)       a[2][1] = a[2][3];     else       a[2][1] = a[2][3] ^ 1;     for (int i = 3; i <= n; i++) {       printf( ? %d %d %d %d n , i - 2, 1, i, 1);       fflush(stdout);       scanf( %d , &t);       if (t == 1)         a[i][1] = a[i - 2][1];       else         a[i][1] = a[i - 2][1] ^ 1;       printf( ? %d %d %d %d n , 1, i - 2, 1, i);       fflush(stdout);       scanf( %d , &t);       if (t == 1)         a[1][i] = a[1][i - 2];       else         a[1][i] = a[1][i - 2] ^ 1;     }     for (int i = 2; i <= n; i++) {       for (int j = 2; j <= n; j++) {         if (i == j && j == n) continue;         if (i == 2 && j == 3) continue;         printf( ? %d %d %d %d n , i - 1, j - 1, i, j);         fflush(stdout);         scanf( %d , &t);         if (t == 1)           a[i][j] = a[i - 1][j - 1];         else           a[i][j] = a[i - 1][j - 1] ^ 1;       }     }     solve();     printf( ? %d %d %d %d n , X1, Y1, X2, Y2);     fflush(stdout);     scanf( %d , &t);     printf( ! n );     if (t == 1) {       if (color == 1) {         for (int i = 1; i <= n; i++) {           for (int j = 1; j <= n; j++) {             if ((i + j) % 2 == 1)               printf( %d , a[i][j] ^ 1);             else               printf( %d , a[i][j]);           }           printf(  n );         }       } else {         for (int i = 1; i <= n; i++) {           for (int j = 1; j <= n; j++) printf( %d , a[i][j]);           printf(  n );         }       }     } else {       if (color == 2) {         for (int i = 1; i <= n; i++) {           for (int j = 1; j <= n; j++) {             if ((i + j) % 2 == 1)               printf( %d , a[i][j] ^ 1);             else               printf( %d , a[i][j]);           }           printf(  n );         }       } else {         for (int i = 1; i <= n; i++) {           for (int j = 1; j <= n; j++) printf( %d , a[i][j]);           printf(  n );         }       }     }   }