#include <bits/stdc++.h>
using namespace std;
int i, i0, n, m;
int ans[55][55];
bool query(int x1, int y1, int x2, int y2) {
  cout << "?"
       << " " << x1 << " " << y1 << " " << x2 << " " << y2 << endl;
  bool x;
  cin >> x;
  return x;
}
int main() {
  memset(ans, 0, sizeof(ans, -1));
  cin >> n;
  ans[1][1] = 1, ans[2][3] = 0, ans[n][n] = 0;
  ans[1][2] = ans[2][3] ^ (!query(1, 2, 2, 3));
  ans[2][1] = ans[2][3] ^ (!query(2, 1, 2, 3));
  for (i = 3; i <= n; i++) ans[1][i] = ans[1][i - 2] ^ (!query(1, i - 2, 1, i));
  for (i = 2; i <= n; i++) ans[2][i] = ans[1][i - 1] ^ (!query(1, i - 1, 2, i));
  for (i = 3; i <= n; i++)
    for (i0 = 1; i0 <= n; i0++)
      if (i != n || i0 != n)
        ans[i][i0] = ans[i - 2][i0] ^ (!query(i - 2, i0, i, i0));
  bool p = 0, f = 0;
  for (i = 1; i + 2 <= n && !f; i += 2) {
    for (i0 = 1; i0 + 2 <= n && !f; i0 += 2) {
      if (ans[i][i0] == 1 && ans[i + 2][i0 + 2] == 0) {
        f = 1;
        if (query(i, i0, i + 1, i0 + 2))
          p = (ans[i + 1][i0 + 2] != ans[i][i0]);
        else {
          if (query(i, i0 + 1, i + 2, i0 + 2))
            p = (ans[i + 2][i0 + 2] != ans[i][i0 + 1]);
          else {
            if (ans[i][i0 + 2] == 0)
              p = (ans[i][i0 + 1] != 1);
            else
              p = (ans[i + 1][i0 + 2] != 0);
          }
        }
      }
    }
  }
  cout << "!" << endl;
  for (i = 1; i <= n; i++) {
    for (i0 = 1; i0 <= n; i0++) {
      if ((i + i0) % 2) ans[i][i0] ^= p;
      cout << ans[i][i0];
    }
    cout << endl;
  }
  return 0;
}
