#include <bits/stdc++.h>
using namespace std;
const double PI = 3.1415926535898;
const double E = 2.718281828459;
const int INF = 0x7fffffff;
const int mod = 1e9 + 7;
const int maxn = 1e5 + 10;
int n;
int a[51][51];
int ask(int r1, int c1, int r2, int c2) {
  cout << "? " << r1 << " " << c1 << " " << r2 << " " << c2 << endl;
  int ans;
  cin >> ans;
  return ans;
}
void solveRow2(int r, int c) {
  cout << "? " << r << " " << c << " " << r << " " << c + 2 << endl;
  int ans;
  cin >> ans;
  if (ans)
    a[r][c] = a[r][c + 2];
  else
    a[r][c] = 1 - a[r][c + 2];
}
void solve(int r1, int c1, int r2, int c2) {
  int ans = ask(r1, c1, r2, c2);
  if (ans)
    a[r2][c2] = a[r1][c1];
  else
    a[r2][c2] = 1 - a[r1][c1];
}
void solve(int r, int c) {
  if (r > 1 && c > 1)
    solve(r - 1, c - 1, r, c);
  else if (c >= 3)
    solve(r, c - 2, r, c);
  else if (r >= 3)
    solve(r - 2, c, r, c);
}
int main(int argc, const char *argv[]) {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> n;
  a[1][1] = 1;
  int x = 0, y = 0;
  for (int i = 1; i <= n; i++) {
    for (int j = 2; j <= n; j++) {
      if (i == 1 && j <= 2) continue;
      solve(i, j);
      if (i > 2 && j > 2 && a[i - 2][j - 2] != a[i][j]) x = i - 2, y = j - 2;
    }
    if (i != 1) solveRow2(i, 1);
  }
  bool ok = true;
  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 << endl;
    int ans;
    cin >> ans;
    if ((a[x + 1][y] == a[x + 2][y + 2]) ^ (ans) == 1) ok = false;
  } else {
    cout << "? " << x << " " << y << " " << x + 2 << " " << y + 1 << endl;
    int ans;
    cin >> ans;
    if ((a[x][y] == a[x + 2][y + 1]) ^ (ans) == 1) ok = false;
  }
  cout << "!" << endl;
  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 << endl;
  }
  return 0;
}
