#include <bits/stdc++.h>
using namespace std;
int n, a[60][60];
int q(int a1, int b1, int a2, int b2) {
  printf("? %d %d %d %d\n", a1, b1, a2, b2);
  fflush(stdout);
  int x;
  scanf("%d", &x);
  return x ^ 1;
}
int main() {
  scanf("%d", &n);
  a[1][1] = 1;
  for (int i = 1; i <= n; i++) {
    if (i == 1) {
      for (int j = 3; j <= n; j += 2) a[i][j] = a[i][j - 2] ^ q(i, j - 2, i, j);
      if (i + 1 <= n) a[i + 1][2] = a[i][1] ^ q(i, 1, i + 1, 2);
      continue;
    }
    if (i & 1) {
      for (int j = 5; j <= n; j += 2) a[i][j] = a[i][j - 2] ^ q(i, j - 2, i, j);
      a[i][1] = a[i][3] ^ q(i, 1, i, 3);
      if (i + 1 <= n) a[i + 1][2] = a[i][1] ^ q(i, 1, i + 1, 2);
    } else {
      for (int j = 4; j <= n; j += 2) a[i][j] = a[i][j - 2] ^ q(i, j - 2, i, j);
      if (i + 1 <= n) a[i + 1][3] = a[i][2] ^ q(i, 2, i + 1, 3);
    }
  }
  for (int i = 1; i <= n; i++) {
    if (i & 1) {
      for (int j = 4; j <= n; j += 2) a[i][j] = q(i, j - 2, i, j) ^ a[i][j - 2];
      if (i + 1 <= n) a[i + 1][3] = a[i][2] ^ q(i, 2, i + 1, 3);
    } else {
      for (int j = 5; j <= n; j += 2) a[i][j] = a[i][j - 2] ^ q(i, j - 2, i, j);
      a[i][1] = a[i][3] ^ q(i, 1, i, 3);
      if (i + 1 <= n) a[i + 1][2] = a[i][1] ^ q(i, 1, i + 1, 2);
    }
  }
  int v;
  for (int i = 1; i <= n; i += 2)
    if (a[i][i] != a[i + 2][i + 2]) {
      if (a[i][i] ^ a[i + 1][i] ^ a[i + 1][i + 1] ^ a[i + 2][i + 1] == 0) {
        int r = q(i, i, i + 2, i + 1);
        if (!r)
          v = a[i][i] ^ a[i + 2][i + 1];
        else
          v = a[i][i] ^ a[i + 2][i + 1] ^ 1;
      } else {
        int r = q(i + 1, i, i + 2, i + 2);
        if (!r)
          v = a[i + 1][i] ^ a[i + 2][i + 2];
        else
          v = a[i + 1][i] ^ a[i + 2][i + 2] ^ 1;
      }
      break;
    }
  printf("!\n");
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      if ((i + j) % 2 == 1) a[i][j] ^= v;
      printf("%d", a[i][j]);
    }
    printf("\n");
  }
}
