#include <bits/stdc++.h>
#pragma GCC target("avx2")
#pragma GCC optimization("O3")
#pragma GCC optimization("unrolled-loops")
using namespace std;
const long long mod = 1e9 + 9;
const long long mod2 = 1e9 + 9;
const long long INF = 1e12;
const int oo = 1e6;
int test = 1;
void Varvalian() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ifstream *fi = new ifstream("TestCode.inp");
  ofstream *fo = new ofstream("TestCode.out");
  if (*fi) {
    cin.rdbuf(fi->rdbuf());
    cout.rdbuf(fo->rdbuf());
  }
}
void db();
int n, a[55][55];
int a1[55][55], a2[55][55];
int x, y;
void In() { cin >> n; }
void Init() {
  a[1][1] = 1;
  a[n][n] = 0;
}
void sol() {
  In();
  Init();
  bool ans = 0;
  for (int i = 1; i <= n; i++) {
    for (int j = 2; j <= n; j++) {
      if (i == 1 && j <= 2) continue;
      if (i == 1) {
        cout << "?"
             << " " << i << " " << j - 2 << " " << i << " " << j << '\n';
        cout.flush();
        cin >> ans;
        if (ans)
          a[i][j] = a[i][j - 2];
        else
          a[i][j] = 1 - a[i][j - 2];
      } else {
        cout << "?"
             << " " << i - 1 << " " << j - 1 << " " << i << " " << j << '\n';
        cout.flush();
        cin >> ans;
        if (ans)
          a[i][j] = a[i - 1][j - 1];
        else
          a[i][j] = 1 - a[i - 1][j - 1];
      }
      if (i > 2 && j > 2 && a[i - 2][j - 2] != a[i][j]) x = i - 2, y = j - 2;
    }
    if (i != 1) {
      cout << "?"
           << " " << i << " " << 1 << " " << i << " " << 3 << '\n';
      cout.flush();
      cin >> ans;
      if (ans)
        a[i][1] = a[i][3];
      else
        a[i][1] = 1 - a[i][3];
    }
  }
  bool ok = 1;
  if ((a[x + 1][y] == a[x + 2][y + 1]) ^ (a[x][y] == a[x + 2][y])) {
    cout << "?"
         << " " << x + 1 << " " << y << " " << x + 2 << " " << y + 2 << '\n';
    cout.flush();
    cin >> ans;
    if ((a[x + 1][y] == a[x + 2][y + 2]) ^ (ans) == 1) ok = 0;
  } else {
    cout << "?"
         << " " << x << " " << y << " " << x + 2 << " " << y + 1 << '\n';
    cout.flush();
    cin >> ans;
    if ((a[x][y] == a[x + 2][y + 1]) ^ (ans) == 1) ok = 0;
  }
  cout << "!" << '\n';
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      if ((i + j) % 2 == 0 || ok)
        cout << a[i][j];
      else
        cout << 1 - a[i][j];
    }
    cout << '\n';
  }
  return;
}
void db() {}
int32_t main() {
  Varvalian();
  sol();
}
