#include <bits/stdc++.h>
using namespace std;
using pii = pair<int, int>;
using ll = long long;
pii operator+(pii& p1, pii& p2) {
  return {p1.first + p2.first, p1.second + p2.second};
}
bool isvalidpos(pii& p, int n) {
  return p.first >= 0 && p.first < n && p.second >= 0 && p.second < n;
}
int main() {
  int n;
  cin >> n;
  vector<vector<int>> v1(n, vector<int>(n, -1));
  vector<vector<int>> v2(n, vector<int>(n, -1));
  v1[0][0] = 1;
  v1[n - 1][n - 1] = 0;
  v2[0][0] = 1;
  v2[n - 1][n - 1] = 0;
  queue<pii> q;
  q.push({0, 0});
  pii dyx[] = {{2, 0}, {0, 2}, {1, 1}};
  while (!q.empty()) {
    pii now = q.front();
    q.pop();
    for (int i = 0; i < 3; i++) {
      pii nxt = now + dyx[i];
      if (!isvalidpos(nxt, n)) continue;
      if (v1[nxt.first][nxt.second] != -1) continue;
      cout << "? " << now.first + 1 << " " << now.second + 1 << " "
           << nxt.first + 1 << " " << nxt.second + 1 << endl;
      cout.flush();
      int res;
      cin >> res;
      if (res == 1)
        v2[nxt.first][nxt.second] = v1[nxt.first][nxt.second] =
            v1[now.first][now.second];
      else
        v2[nxt.first][nxt.second] = v1[nxt.first][nxt.second] =
            1 - v1[now.first][now.second];
      q.push(nxt);
    }
  }
  v1[0][1] = 0;
  v2[0][1] = 1;
  q.push({0, 1});
  while (!q.empty()) {
    pii now = q.front();
    q.pop();
    for (int i = 0; i < 3; i++) {
      pii nxt = now + dyx[i];
      if (!isvalidpos(nxt, n)) continue;
      if (v1[nxt.first][nxt.second] != -1) continue;
      cout << "? " << now.first + 1 << " " << now.second + 1 << " "
           << nxt.first + 1 << " " << nxt.second + 1 << endl;
      cout.flush();
      int res;
      cin >> res;
      if (res == 1) {
        v2[nxt.first][nxt.second] = v2[now.first][now.second];
        v1[nxt.first][nxt.second] = v1[now.first][now.second];
      } else {
        v2[nxt.first][nxt.second] = 1 - v2[now.first][now.second];
        v1[nxt.first][nxt.second] = 1 - v1[now.first][now.second];
      }
      q.push(nxt);
    }
  }
  for (int i = 1; i < n; i += 2) {
    cout << "? " << i + 1 << " " << 1 << " " << i + 2 << " " << 2 << endl;
    cout.flush();
    int res;
    cin >> res;
    if (res == 1) {
      v2[i][0] = v2[i + 1][1];
      v1[i][0] = v1[i + 1][1];
    } else {
      v2[i][0] = 1 - v2[i + 1][1];
      v1[i][0] = 1 - v1[i + 1][1];
    }
  }
  bool answer = false;
  pii dyx2[][4] = {{{0, 0}, {0, 1}, {0, 2}, {1, 2}},
                   {{0, 0}, {0, 1}, {1, 1}, {1, 2}},
                   {{0, 0}, {1, 0}, {1, 1}, {1, 2}}};
  bool end = false;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      bool palin1 = false;
      bool palin2 = false;
      pii now = {i, j};
      for (int k1 = 0; k1 < 3; k1++) {
        bool check = true;
        for (int k2 = 0; k2 < 4; k2++) {
          pii nxt = now + dyx2[k1][k2];
          if (!isvalidpos(nxt, n)) {
            check = false;
            break;
          }
        }
        if (!check) continue;
        if (v1[now.first + dyx2[k1][0].first]
              [now.second + dyx2[k1][0].second] ==
                v1[now.first + dyx2[k1][3].first]
                  [now.second + dyx2[k1][3].second] &&
            v1[now.first + dyx2[k1][1].first]
              [now.second + dyx2[k1][1].second] ==
                v1[now.first + dyx2[k1][2].first]
                  [now.second + dyx2[k1][2].second])
          palin1 = true;
        if (v2[now.first + dyx2[k1][0].first]
              [now.second + dyx2[k1][0].second] ==
                v2[now.first + dyx2[k1][3].first]
                  [now.second + dyx2[k1][3].second] &&
            v2[now.first + dyx2[k1][1].first]
              [now.second + dyx2[k1][1].second] ==
                v2[now.first + dyx2[k1][2].first]
                  [now.second + dyx2[k1][2].second])
          palin2 = true;
      }
      if (palin1 || palin2) {
        cout << "? " << now.first + 1 << " " << now.second + 1 << " "
             << now.first + 2 << " " << now.second + 3 << endl;
        cout.flush();
        int res;
        cin >> res;
        if (res == 1) {
          if (palin1)
            answer = true;
          else
            answer = false;
        } else {
          if (palin1)
            answer = false;
          else
            answer = true;
        }
        end = true;
        break;
      }
    }
    if (end) break;
  }
  cout << "!" << endl;
  cout.flush();
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      if (answer)
        cout << v1[i][j];
      else
        cout << v2[i][j];
    }
    cout << endl;
    cout.flush();
  }
  return 0;
}
