#include <bits/stdc++.h>
using namespace std;
int ask(int x1, int y1, int x2, int y2) {
  printf("? %d %d %d %d\n", x1, y1, x2, y2);
  fflush(stdout);
  int ans;
  scanf("%d", &ans);
  return ans;
}
int n;
int A[60][60];
bool mark[2][60][60][60][60];
bool memo[2][60][60][60][60];
int movx[] = {0, 1};
int movy[] = {1, 0};
bool dp(int p, int x1, int y1, int x2, int y2) {
  if (x1 > x2 || y1 > y2) return false;
  if (x1 <= 0 || x1 > n || x2 <= 0 || x2 > n) return false;
  if (y1 <= 0 || y1 > n || y2 <= 0 || y2 > n) return false;
  if (x1 == x2 && y1 == y2) return true;
  bool &ans = memo[p][x1][y1][x2][y2];
  if (mark[p][x1][y1][x2][y2]) return ans;
  mark[p][x1][y1][x2][y2] = true;
  ans = false;
  int v1 = A[x1][y1], v2 = A[x2][y2];
  if ((x1 + y1) & 1) v1 ^= p ^ 1;
  if ((x2 + y2) & 1) v2 ^= p ^ 1;
  if (v1 != v2) return ans = false;
  if ((x1 == x2 && y1 + 1 == y2) || (x1 + 1 == x2 && y1 == y2))
    return ans = v1 == v2;
  for (int i = 0; i < 2; i++) {
    for (int j = 0; j < 2; j++) {
      ans =
          ans || dp(p, x1 + movx[i], y1 + movy[i], x2 - movx[j], y2 - movy[j]);
    }
  }
  return ans;
}
void f(int &x1, int &y1, int &x2, int &y2) {
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      for (int k = i; k <= n; k++) {
        for (int r = j; r <= n; r++) {
          bool a1 = dp(0, i, j, k, r);
          bool a2 = dp(1, i, j, k, r);
          if (a1 != a2 && (abs(i - k) + abs(j - r) > 1)) {
            x1 = i;
            y1 = j;
            x2 = k;
            y2 = r;
            return;
          }
        }
      }
    }
  }
}
int main() {
  scanf("%d", &n);
  A[1][1] = A[1][2] = 1;
  A[n][n] = 0;
  for (int i = 3; i <= n; i++) A[1][i] = ask(1, i - 2, 1, i) ^ A[1][i - 2] ^ 1;
  for (int i = 2; i <= n; i++) {
    for (int j = 2; j <= n; j++) {
      if (i == n && j == n) continue;
      A[i][j] = ask(i - 1, j - 1, i, j) ^ A[i - 1][j - 1] ^ 1;
    }
    A[i][1] = ask(i, 1, i, 3) ^ A[i][3] ^ 1;
  }
  int x1, y1, x2, y2;
  f(x1, y1, x2, y2);
  int ans = ask(x1, y1, x2, y2);
  bool a1 = dp(0, x1, y1, x2, y2), a2 = dp(1, x1, y1, x2, y2);
  int p;
  if (a1 == ans)
    p = 0;
  else
    p = 1;
  printf("!\n");
  fflush(stdout);
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      if ((i + j) & 1)
        printf("%d", A[i][j] ^ p ^ 1);
      else
        printf("%d", A[i][j]);
    }
    printf("\n");
    fflush(stdout);
  }
  return 0;
}
