#include <bits/stdc++.h>
using namespace std;
void read(int &x) {
  int f = 1;
  x = 0;
  char s = getchar();
  while (s < '0' || s > '9') {
    if (s == '-') f = -1;
    s = getchar();
  }
  while (s >= '0' && s <= '9') {
    x = x * 10 + s - '0';
    s = getchar();
  }
  x *= f;
}
const int N = 50;
int a[N + 3][N + 3];
vector<int> pth;
int n, ans;
int query(int lx, int ly, int rx, int ry) {
  printf("? %d %d %d %d\n", lx, ly, rx, ry);
  fflush(stdout);
  int ret;
  scanf("%d", &ret);
  return ret;
}
int main() {
  scanf("%d", &n);
  a[1][1] = 1;
  a[n][n] = 0;
  for (int i = 1; i <= n; i++) {
    if (i & 1) {
      if (i != 1) {
        a[i][1] = a[i - 2][1] ^ query(i - 2, 1, i, 1) ^ 1;
      }
      for (int j = 3; j <= n; j += 2) {
        if (i == n && j == n) continue;
        a[i][j] = a[i][j - 2] ^ query(i, j - 2, i, j) ^ 1;
      }
    } else {
      for (int j = 2; j <= n; j += 2) {
        a[i][j] = a[i - 1][j - 1] ^ query(i - 1, j - 1, i, j) ^ 1;
      }
    }
  }
  a[1][2] = 0;
  for (int i = 4; i <= n; i += 2) {
    a[1][i] = a[1][i - 2] ^ query(1, i - 2, 1, i) ^ 1;
  }
  for (int i = 3; i <= n; i += 2) {
    a[2][i] = a[1][i - 1] ^ query(1, i - 1, 2, i) ^ 1;
  }
  a[2][1] = a[2][3] ^ query(2, 1, 2, 3) ^ 1;
  for (int i = 3; i <= n; i++) {
    if (i & 1) {
      for (int j = 2; j <= n; j += 2) {
        a[i][j] = a[i - 2][j] ^ query(i - 2, j, i, j) ^ 1;
      }
    } else {
      for (int j = 1; j <= n; j += 2) {
        a[i][j] = a[i - 2][j] ^ query(i - 2, j, i, j) ^ 1;
      }
    }
  }
  for (int i = 1; i <= n; i++) {
    pth.push_back(a[i][1]);
  }
  for (int i = 2; i <= n; i++) {
    pth.push_back(a[n][i]);
  }
  int lx, rx, ly, ry;
  for (int i = 3; i <= n + n - 2; i++) {
    if ((pth[i] ^ pth[i - 1] ^ pth[i - 2] ^ pth[i - 3]) == 0) {
      lx = i - 3 < n ? i - 3 + 1 : n;
      ly = i - 3 < n ? 1 : i - 3 - n + 2;
      rx = i < n ? i + 1 : n;
      ry = i < n ? 1 : i - n + 2;
      break;
    }
  }
  if (query(lx, ly, rx, ry)) {
    ans = a[rx][ry] ^ a[lx][ly];
  } else {
    ans = a[rx][ry] ^ 1 ^ a[lx][ly];
  }
  puts("!");
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++)
      printf("%d", ((i + j) & 1) ? (a[i][j] ^ ans) : a[i][j]);
    puts("");
  }
  fflush(stdout);
  return 0;
}
