#include <bits/stdc++.h>
using namespace std;
int a[55][55];
int que(int x, int y, int xx, int yy) {
  printf("? %d %d %d %d\n", x, y, xx, yy);
  fflush(stdout);
  int v;
  scanf("%d", &v);
  return v;
}
int main() {
  int n;
  scanf("%d", &n);
  a[1][1] = 1;
  for (int i = 3; i <= n; i++) {
    int x = que(1, i - 2, 1, i);
    a[1][i] = 1 ^ a[1][i - 2] ^ x;
  }
  for (int i = 2; i <= n; i++) {
    for (int j = n; j >= 1; j--) {
      if (i == n && j == n) continue;
      if (j != 1) {
        int x = que(i - 1, j - 1, i, j);
        a[i][j] = x ^ a[i - 1][j - 1] ^ 1;
      } else {
        int x = que(i, j, i, j + 2);
        a[i][j] = x ^ a[i][j + 2] ^ 1;
      }
    }
  }
  int fg = 0;
  for (int i = 1; i + 2 <= n; i += 2) {
    if (a[i][i] == 1 && a[i + 2][i + 2] == 0) {
      int x = que(i, i, i + 1, i + 2);
      if (x) {
        fg = a[i + 1][i + 2] ^ 1;
      } else if (que(i, i + 1, i + 2, i + 2)) {
        fg = a[i][i + 1];
      } else {
        if (a[i][i + 1] == a[i + 1][i + 2]) {
          fg = a[i][i + 1] ^ a[i][i + 2] ^ 1;
        } else {
          fg = a[i + 1][i + 2];
        }
      }
      break;
    }
  }
  printf("!\n");
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      if (fg && ((i + j) & 1)) {
        a[i][j] ^= 1;
      }
      printf("%d", a[i][j]);
    }
    printf("\n");
  }
  return 0;
}
