#include <bits/stdc++.h>
using namespace std;
const long long FASTIO = []() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  return 0;
}();
long long n;
vector<vector<long long>> ans;
long long ask(long long x1, long long y1, long long x2, long long y2) {
  cout << "? " << x1 << ' ' << y1 << ' ' << x2 << ' ' << y2 << '\n';
  cout.flush();
  long long c;
  cin >> c;
  if (c == -1) {
    while (1) {
    }
  }
  return c;
}
void bfs(long long x, long long y) {
  vector<vector<long long>> used(n + 5, vector<long long>(n + 5, true));
  vector<long long> v1 = {2, 1, 0, 0, -1, -2};
  vector<long long> v2 = {0, 1, 2, -2, -1, 0};
  for (long long i = 1; i <= n; i++) {
    for (long long j = 1; j <= n; j++) {
      used[i][j] = false;
    }
  }
  queue<pair<long long, long long>> q;
  q.push({x, y});
  used[x][y] = true;
  while (!q.empty()) {
    long long X = q.front().first;
    long long Y = q.front().second;
    q.pop();
    for (long long i = 0; i < 6; i++) {
      if (X + v1[i] > 0 && Y + v2[i] > 0 && !used[X + v1[i]][Y + v2[i]]) {
        pair<long long, long long> a = {X, Y}, b = {X + v1[i], Y + v2[i]};
        if (v1[i] < 0 || v2[i] < 0) {
          swap(a, b);
        }
        if (b != pair<long long, long long>{n, n}) {
          bool t = ask(a.first, a.second, b.first, b.second);
          if (t) {
            ans[X + v1[i]][Y + v2[i]] = ans[X][Y];
          } else {
            ans[X + v1[i]][Y + v2[i]] = !ans[X][Y];
          }
        }
        used[X + v1[i]][Y + v2[i]] = true;
        q.push({X + v1[i], Y + v2[i]});
      }
    }
  }
}
signed main() {
  cin >> n;
  ans.resize(n + 10, vector<long long>(n + 10, -1));
  ans[1][1] = 1;
  ans[n][n] = 0;
  bfs(1, 1);
  long long p = 1;
  while (ans[p][p] == ans[p + 2][p + 2]) {
    ++p;
  }
  if (ask(p, p, p + 2, p + 1)) {
    ans[p + 2][p + 1] = ans[p][p];
    bfs(p + 2, p + 1);
  } else if (ask(p + 1, p, p + 2, p + 2)) {
    ans[p + 1][p] = ans[p + 2][p + 2];
    bfs(p + 1, p);
  } else {
    if (ans[p + 2][p] == 1) {
      ans[p + 2][p + 1] = 0;
      bfs(p + 2, p + 1);
    } else {
      ans[p + 1][p] = 1;
      bfs(p + 1, p);
    }
  }
  cout << "!\n";
  for (long long i = 1; i <= n; i++) {
    for (long long j = 1; j <= n; j++) {
      cout << ans[i][j];
    }
    cout << '\n';
  }
}
