#include <bits/stdc++.h>
int query(int i1, int j1, int i2, int j2) {
  int x;
  printf("? %d %d %d %d\n", i1 + 1, j1 + 1, i2 + 1, j2 + 1);
  fflush(stdout);
  scanf("%d", &x);
  return x;
}
void get(char aa[][50 + 1], int n, int i0, int j0) {
  int i, j;
  for (i = i0, j = j0 + 2; j < n; j += 2)
    aa[i][j] = aa[i][j - 2] ^ query(i, j - 2, i, j) ^ 1;
  for (i = i0 + 2; i < n; i += 2)
    for (j = j0; j < n; j += 2)
      aa[i][j] = aa[i - 2][j] ^ query(i - 2, j, i, j) ^ 1;
}
void solve(char aa[][50 + 1], int dp[][50][50][50], int n) {
  int i, j, i1, i2, j1, j2;
  for (i = 0; i < n; i++)
    for (j = 0; j < n; j++) dp[i][j][i][j] = 1;
  for (i = 0; i < n; i++)
    for (j = 1; j < n; j++)
      if (aa[i][j - 1] == aa[i][j]) dp[i][j - 1][i][j] = 1;
  for (j = 0; j < n; j++)
    for (i = 1; i < n; i++)
      if (aa[i - 1][j] == aa[i][j]) dp[i - 1][j][i][j] = 1;
  for (i1 = n - 1; i1 >= 0; i1--)
    for (j1 = n - 1; j1 >= 0; j1--)
      for (i2 = i1; i2 < n; i2++)
        for (j2 = j1; j2 < n; j2++)
          if (i2 + j2 >= i1 + j1 + 2 && aa[i1][j1] == aa[i2][j2]) {
            int x = 0;
            if (i2 >= i1 + 2) x |= dp[i1 + 1][j1][i2 - 1][j2];
            if (j2 >= j1 + 2) x |= dp[i1][j1 + 1][i2][j2 - 1];
            if (i2 >= i1 + 1 && j2 >= j1 + 1)
              x |= dp[i1 + 1][j1][i2][j2 - 1] | dp[i1][j1 + 1][i2 - 1][j2];
            dp[i1][j1][i2][j2] = x;
          }
}
void print(char aa[][50 + 1], int n) {
  int i, j;
  printf("!\n");
  for (i = 0; i < n; i++) {
    for (j = 0; j < n; j++) aa[i][j] += '0';
    printf("%s\n", aa[i]);
  }
  fflush(stdout);
}
int main() {
  static char aa[50][50 + 1], bb[50][50 + 1];
  static int dp[50][50][50][50], dq[50][50][50][50];
  int n, i, j, i1, j1, i2, j2;
  scanf("%d", &n);
  aa[0][0] = 1;
  get(aa, n, 0, 0);
  aa[1][1] = aa[0][0] ^ query(0, 0, 1, 1) ^ 1;
  get(aa, n, 1, 1);
  aa[1][0] = 0;
  get(aa, n, 1, 0);
  aa[0][1] = aa[1][0] ^ query(0, 1, 2, 1) ^ query(1, 0, 2, 1);
  get(aa, n, 0, 1);
  for (i = 0; i < n; i++)
    for (j = 0; j < n; j++) bb[i][j] = aa[i][j] ^ (i ^ j) & 1;
  solve(aa, dp, n);
  solve(bb, dq, n);
  for (i1 = n - 1; i1 >= 0; i1--)
    for (j1 = n - 1; j1 >= 0; j1--)
      for (i2 = i1; i2 < n; i2++)
        for (j2 = j1; j2 < n; j2++)
          if (i2 + j2 >= i1 + j1 + 2) {
            int p = dp[i1][j1][i2][j2], q = dq[i1][j1][i2][j2];
            if (p != q) {
              print(p == query(i1, j1, i2, j2) ? aa : bb, n);
              return 0;
            }
          }
  return 0;
}
