#include <bits/stdc++.h>
using namespace std;
bool ask(int x1, int sldjfngls, int x2, int y2) {
  cout << "? " << x1 + 1 << " " << sldjfngls + 1 << " " << x2 + 1 << " "
       << y2 + 1 << "\n";
  fflush(stdout);
  int x;
  cin >> x;
  return x;
}
pair<int, int> mov[4][4] = {
    {{0, 0}, {0, 1}, {0, 2}, {1, 2}},
    {{0, 0}, {1, 0}, {1, 1}, {1, 2}},
    {{0, 0}, {1, 0}, {2, 0}, {2, 1}},
    {{0, 0}, {0, 1}, {1, 1}, {2, 1}},
};
int main() {
  int n;
  cin >> n;
  vector<vector<int>> a(n, vector<int>(n, -1));
  a[0][0] = 1;
  a.back().back() = 0;
  for (int i = 0; i < n; ++i)
    for (int j = i & 1; j < n; j += 2)
      if (a[i][j] == -1) {
        if (i >= 2) {
          bool r = ask(i - 2, j, i, j);
          a[i][j] = a[i - 2][j] ^ (!r);
        } else if (j >= 2) {
          bool r = ask(i, j - 2, i, j);
          a[i][j] = a[i][j - 2] ^ (!r);
        } else {
          bool r = ask(i - 1, j - 1, i, j);
          a[i][j] = a[i - 1][j - 1] ^ (!r);
        }
      }
  a[1][0] = 0;
  bool r = ask(1, 0, 1, 2);
  a[1][2] = a[1][0] ^ (!r);
  r = ask(0, 1, 1, 2);
  a[0][1] = a[1][2] ^ (!r);
  for (int i = 0; i < n; ++i)
    for (int j = ~i & 1; j < n; j += 2)
      if (a[i][j] == -1) {
        if (i >= 2) {
          bool r = ask(i - 2, j, i, j);
          a[i][j] = a[i - 2][j] ^ (!r);
        } else if (j >= 2) {
          bool r = ask(i, j - 2, i, j);
          a[i][j] = a[i][j - 2] ^ (!r);
        } else {
          bool r = ask(i - 1, j - 1, i, j);
          a[i][j] = a[i - 1][j - 1] ^ (!r);
        }
      }
  bool x = 0, ok = 0;
  for (int i = 0; i < n && !ok; ++i)
    for (int j = 0; j < n && !ok; ++j) {
      for (int k = 0; k < 4; ++k) {
        vector<pair<int, int>> v;
        for (int z = 0; z < 4; ++z) {
          int ni = i + mov[k][z].first;
          int nj = j + mov[k][z].second;
          if (ni < n && nj < n) v.push_back({ni, nj});
        }
        if (v.size() != 4) continue;
        if (!((a[v[0].first][v[0].second] == a[v[2].first][v[2].second]) ^
              (a[v[1].first][v[1].second] == a[v[3].first][v[3].second]))) {
          ok = true;
          r = ask(i, j, v[3].first, v[3].second);
          x ^= (!r) ^ a[v[0].first][v[0].second] ^ a[v[3].first][v[3].second];
          break;
        }
      }
    }
  assert(ok);
  for (int i = 0; i < n; ++i)
    for (int j = ~i & 1; j < n; j += 2) a[i][j] ^= x;
  cout << "!\n";
  for (auto &i : a) {
    for (auto j : i) cout << j;
    cout << "\n";
  }
  fflush(stdout);
  return 0;
}
