#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7;
class {
 public:
  int n;
  bool ask(int x1, int y1, int x2, int y2) {
    cout << "? " << x1 << " " << y1 << " " << x2 << " " << y2 << "\n";
    cout.flush();
    int i;
    cin >> i;
    return i;
  }
  int ans[55][55];
  void solve() {
    cin >> n;
    for (int i = 1; i <= n; ++i)
      for (int j = 1; j <= n; ++j) ans[i][j] = 3;
    ans[1][1] = 1;
    ans[1][2] = 1;
    ans[2][3] = ans[1][2] ^ ask(1, 2, 2, 3) ^ 1;
    ans[2][1] = ans[2][3] ^ ask(2, 1, 2, 3) ^ 1;
    ans[n][n] = 0;
    for (int i = 3; i <= n; ++i) {
      ans[i][1] = ans[i - 2][1] ^ ask(i - 2, 1, i, 1) ^ 1;
    }
    for (int i = 1; i <= n; ++i) {
      for (int j = 1; j <= n; ++j) {
        if (ans[i][j] != 3) continue;
        if (j - 2 >= 1)
          ans[i][j] = ans[i][j - 2] ^ 1 ^ ask(i, j - 2, i, j);
        else if (i - 2 >= 1)
          ans[i][j] = ans[i - 2][j] ^ 1 ^ ask(i - 2, j, i, j);
        else
          ans[i][j] = ans[i - 1][j - 1] ^ 1 ^ ask(i - 1, j - 1, i, j);
      }
    }
    int f[8][3] = {0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0,
                   0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1};
    for (int i = 1; i <= n; ++i) {
      for (int j = 1; j <= n; ++j) {
        for (int k = 0; k < 8; ++k) {
          int x1, x2, x3, y1, y2, y3;
          x1 = i + f[k][0];
          y1 = j + (f[k][0] ^ 1);
          x2 = x1 + f[k][1];
          y2 = y1 + (f[k][1] ^ 1);
          x3 = x2 + f[k][2];
          y3 = y2 + (f[k][2] ^ 1);
          if (x1 <= n && x2 <= n && x3 <= n && y1 <= n && y2 <= n && y3 <= n) {
            if (ans[i][j] ^ ans[x1][y1] ^ ans[x2][y2] ^ ans[x3][y3] == 0) {
              bool res = ask(i, j, x3, y3);
              if (res) {
                if (ans[x3][y3] == ans[i][j]) {
                  outp(1);
                } else {
                  outp(0);
                }
              } else {
                if (ans[i][j] == ans[x3][y3] && ans[x1][y1] == ans[x2][y2]) {
                  outp(0);
                } else {
                  outp(1);
                }
              }
              return;
            }
          }
        }
      }
    }
  }
  void outp(bool flag) {
    cout << "!\n";
    if (flag) {
      for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= n; ++j) {
          cout << ans[i][j];
        }
        cout << "\n";
      }
    } else {
      for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= n; ++j) {
          if ((i + j) & 1)
            cout << (ans[i][j] ^ 1);
          else
            cout << ans[i][j];
        }
        cout << "\n";
      }
    }
  }
} NSPACE;
int main() {
  ios_base::sync_with_stdio(false);
  cout.tie(0);
  cin.tie(0);
  NSPACE.solve();
}
