#include <bits/stdc++.h>
using namespace std;
const int SI = 5e5 + 100;
int a[55][55];
int f1[55][55];
int f2[55][55];
int n, x;
void Q(int y1, int x1, int y2, int x2) {
  cout << '?' << ' ' << x1 << ' ' << y1 << ' ' << x2 << ' ' << y2 << endl;
  cout.flush();
  cin >> x;
}
int huiwen(int y1, int x1, int y2, int x2, int W[][55]) {
  if (W[y1][x1] != W[y2][x2]) return 0;
  if (x1 + 2 == x2) {
    if (W[y1][x1 + 1] == W[y1][x1 + 2]) return 1;
    if (W[y1][x1 + 1] == W[y1 + 1][x1 + 1]) return 1;
    if (W[y1 + 1][x1] == W[y1 + 1][x1 + 1]) return 1;
  } else {
    if (W[y1][x1 + 1] == W[y1 + 1][x1 + 1]) return 1;
    if (W[y1 + 1][x1] == W[y1 + 1][x1 + 1]) return 1;
    if (W[y1 + 1][x1] == W[y1 + 2][x1]) return 1;
  }
  return 0;
}
void FUZHI(int W[][55]) {
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) a[i][j] = W[i][j];
}
void solve() {
  int F, G;
  for (int i = 1; i < n; i++)
    for (int j = 1; j < n; j++) {
      if (i + 2 <= n) {
        F = huiwen(i, j, i + 2, j + 1, f1);
        G = huiwen(i, j, i + 2, j + 1, f2);
        if (F ^ G) {
          Q(i, j, i + 2, j + 1);
          if (F == x)
            FUZHI(f1);
          else
            FUZHI(f2);
          return;
        }
      }
      if (j + 2 <= n) {
        F = huiwen(i, j, i + 1, j + 2, f1);
        G = huiwen(i, j, i + 1, j + 2, f2);
        if (F ^ G) {
          Q(i, j, i + 1, j + 2);
          if (F == x)
            FUZHI(f1);
          else
            FUZHI(f2);
          return;
        }
      }
    }
}
void get_ans() {
  cout << '!' << endl;
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) cout << a[j][i];
    cout << endl;
  }
}
int main() {
  memset(a, -1, sizeof(a));
  memset(f1, -1, sizeof(f1));
  memset(f2, -1, sizeof(f2));
  cin >> n;
  a[1][1] = f1[1][1] = 1;
  a[n][n] = 0;
  f1[1][2] = 1;
  Q(1, 2, 2, 3);
  if (x == 1)
    f1[2][3] = f1[1][2];
  else
    f1[2][3] = f1[1][2] ^ 1;
  Q(2, 1, 2, 3);
  if (x == 1)
    f1[2][1] = f1[2][3];
  else
    f1[2][1] = f1[2][3] ^ 1;
  Q(1, 1, 2, 2);
  if (x == 1)
    f1[2][2] = f1[1][1];
  else
    f1[2][2] = f1[1][1] ^ 1;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++)
      if (f1[i][j] == -1) {
        if (i > 2) {
          Q(i - 2, j, i, j);
          if (x == 1)
            f1[i][j] = f1[i - 2][j];
          else
            f1[i][j] = f1[i - 2][j] ^ 1;
        } else if (j > 2) {
          Q(i, j - 2, i, j);
          if (x == 1)
            f1[i][j] = f1[i][j - 2];
          else
            f1[i][j] = f1[i][j - 2] ^ 1;
        }
      }
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) {
      if ((i + j) % 2 == 0)
        f2[i][j] = f1[i][j];
      else
        f2[i][j] = f1[i][j] ^ 1;
    }
  solve();
  get_ans();
  return 0;
}
