#include <bits/stdc++.h>
using namespace std;
int n;
int r;
int a[51][51];
int f[51][51][51][51];
vector<pair<int, int> > pos_col[2];
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  for (int i = 0; i <= 50; i++)
    for (int j = 0; j <= 50; j++) a[i][j] = -1;
  a[1][1] = 1;
  a[1][2] = 2;
  a[n][n] = 0;
  int cnt = 0;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) {
      if (a[i][j] == 1 || a[i][j] == 0) {
        if ((i + 1 <= n) && (j + 1 <= n) && a[i + 1][j + 1] == -1) {
          cnt++;
          cout << '?' << ' ' << i << ' ' << j << ' ' << i + 1 << ' ' << j + 1
               << endl;
          cin >> r;
          a[i + 1][j + 1] = (r + 1) % 2;
          a[i + 1][j + 1] = (a[i + 1][j + 1] + a[i][j]) % 2;
        }
        if (i + 2 <= n && a[i + 2][j] == -1) {
          cnt++;
          cout << '?' << ' ' << i << ' ' << j << ' ' << i + 2 << ' ' << j
               << endl;
          cin >> r;
          a[i + 2][j] = (r + 1) % 2;
          a[i + 2][j] = (a[i + 2][j] + a[i][j]) % 2;
        }
        if (j + 2 <= n && a[i][j + 2] == -1) {
          cnt++;
          cout << '?' << ' ' << i << ' ' << j << ' ' << i << ' ' << j + 2
               << endl;
          cin >> r;
          a[i][j + 2] = (r + 1) % 2;
          a[i][j + 2] = (a[i][j + 2] + a[i][j]) % 2;
        }
      } else if (a[i][j] == 2) {
        pos_col[0].push_back(pair<int, int>(i, j));
        if ((i + 1 <= n) && (j + 1 <= n) && a[i + 1][j + 1] == -1) {
          cnt++;
          cout << '?' << ' ' << i << ' ' << j << ' ' << i + 1 << ' ' << j + 1
               << endl;
          cin >> a[i + 1][j + 1];
          a[i + 1][j + 1] = (a[i + 1][j + 1] == 0) + a[i][j];
        }
        if (i + 2 <= n && a[i + 2][j] == -1) {
          cnt++;
          cout << '?' << ' ' << i << ' ' << j << ' ' << i + 2 << ' ' << j
               << endl;
          cin >> a[i + 2][j];
          a[i + 2][j] = (a[i + 2][j] == 0) + a[i][j];
        }
        if (j + 2 <= n && a[i][j + 2] == -1) {
          cnt++;
          cout << '?' << ' ' << i << ' ' << j << ' ' << i << ' ' << j + 2
               << endl;
          cin >> a[i][j + 2];
          a[i][j + 2] = (a[i][j + 2] == 0) + a[i][j];
        }
      } else if (a[i][j] == 3) {
        pos_col[1].push_back(pair<int, int>(i, j));
        if ((i + 1 <= n) && (j + 1 <= n) && a[i + 1][j + 1] == -1) {
          cnt++;
          cout << '?' << ' ' << i << ' ' << j << ' ' << i + 1 << ' ' << j + 1
               << endl;
          cin >> a[i + 1][j + 1];
          a[i + 1][j + 1] = a[i][j] - (a[i + 1][j + 1] == 0);
        }
        if (i + 2 <= n && a[i + 2][j] == -1) {
          cnt++;
          cout << '?' << ' ' << i << ' ' << j << ' ' << i + 2 << ' ' << j
               << endl;
          cin >> a[i + 2][j];
          a[i + 2][j] = a[i][j] - (a[i + 2][j] == 0);
        }
        if (j + 2 <= n && a[i][j + 2] == -1) {
          cnt++;
          cout << '?' << ' ' << i << ' ' << j << ' ' << i << ' ' << j + 2
               << endl;
          cin >> a[i][j + 2];
          a[i][j + 2] = a[i][j] - (a[i][j + 2] == 0);
        }
      } else {
        if ((i + 1 <= n) && (j + 1 <= n)) {
          cnt++;
          cout << '?' << ' ' << i << ' ' << j << ' ' << i + 1 << ' ' << j + 1
               << endl;
          cin >> a[i][j];
          if (a[i + 1][j + 1] == 2)
            a[i][j] = (a[i + 1][j + 1] + (a[i][j] == 0));
          else
            a[i][j] = (a[i + 1][j + 1] - (a[i][j] == 0));
        }
        if (a[i][j] == 2)
          pos_col[0].push_back(pair<int, int>(i, j));
        else
          pos_col[1].push_back(pair<int, int>(i, j));
        if (i + 2 <= n && a[i + 2][j] == -1) {
          cnt++;
          cout << '?' << ' ' << i << ' ' << j << ' ' << i + 2 << ' ' << j
               << endl;
          cin >> a[i + 2][j];
          if (a[i][j] == 3)
            a[i + 2][j] = a[i][j] - (a[i + 2][j] == 0);
          else
            a[i + 2][j] = (a[i + 2][j] == 0) + a[i][j];
        }
      }
    }
  for (int i = 0; i < pos_col[0].size(); i++)
    a[pos_col[0][i].first][pos_col[0][i].second] = 1;
  for (int i = 0; i < pos_col[1].size(); i++)
    a[pos_col[1][i].first][pos_col[1][i].second] = 0;
  bool ok = true;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) {
      bool tmp = true;
      if (i + 2 <= n && j + 1 <= n && cnt < n * n)
        if (a[i][j] == a[i + 2][j + 1] &&
            (a[i][j + 1] == a[i + 1][j + 1] || a[i + 1][j] == a[i + 1][j + 1] ||
             a[i + 1][j] == a[i + 2][j])) {
          cnt++;
          cout << '?' << ' ' << i << ' ' << j << ' ' << i + 2 << ' ' << j + 1
               << endl;
          cin >> f[i][j][i + 2][j + 1];
          if (!f[i][j][i + 2][j + 1]) tmp = false;
        }
      if (i + 1 <= n && j + 2 <= n && cnt < n * n)
        if (a[i][j] == a[i + 1][j + 2] &&
            (a[i + 1][j] == a[i + 1][j + 1] || a[i][j + 1] == a[i + 1][j + 1] ||
             a[i][j + 1] == a[i][j + 2])) {
          cnt++;
          cout << '?' << ' ' << i << ' ' << j << ' ' << i + 1 << ' ' << j + 2
               << endl;
          cin >> f[i][j][i + 1][j + 2];
          if (!f[i][j][i + 1][j + 2]) tmp = false;
        }
      if (!tmp) {
        ok = false;
        break;
      }
    }
  if (cnt < n * n) {
    for (int i = 1; i <= n; i++)
      for (int j = 1; j <= n; j++) {
        bool tmp = true;
        if (i + 2 <= n && j + 1 <= n && cnt < n * n)
          if (a[i][j] != a[i + 2][j + 1] ||
              (a[i][j + 1] != a[i + 1][j + 1] &&
               a[i + 1][j] != a[i + 1][j + 1] && a[i + 1][j] != a[i + 2][j])) {
            cnt++;
            cout << '?' << ' ' << i << ' ' << j << ' ' << i + 2 << ' ' << j + 1
                 << endl;
            cin >> f[i][j][i + 2][j + 1];
            if (f[i][j][i + 2][j + 1]) tmp = false;
          }
        if (i + 1 <= n && j + 2 <= n && cnt < n * n)
          if (a[i][j] != a[i + 1][j + 2] ||
              (a[i + 1][j] != a[i + 1][j + 1] &&
               a[i][j + 1] != a[i + 1][j + 1] && a[i][j + 1] != a[i][j + 2])) {
            cnt++;
            cout << '?' << ' ' << i << ' ' << j << ' ' << i + 1 << ' ' << j + 2
                 << endl;
            cin >> f[i][j][i + 1][j + 2];
            if (f[i][j][i + 1][j + 2]) tmp = false;
          }
        if (!tmp) {
          ok = false;
          break;
        }
      }
  }
  if (ok) {
    cout << '!' << endl;
    for (int i = 1; i <= n; i++) {
      for (int j = 1; j <= n; j++) cout << a[i][j];
      cout << endl;
    }
    return 0;
  }
  for (int i = 0; i < pos_col[0].size(); i++)
    a[pos_col[0][i].first][pos_col[0][i].second] = 0;
  for (int i = 0; i < pos_col[1].size(); i++)
    a[pos_col[1][i].first][pos_col[1][i].second] = 1;
  cout << '!' << endl;
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) cout << a[i][j];
    cout << endl;
  }
}
