#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");
      }
    }
  }
}
