#include <bits/stdc++.h>
using namespace std;
int main() {
  int n;
  cin >> n;
  auto get = [&](int x1, int y1, int x2, int y2) {
    cout << "? " << x1 + 1 << ' ' << y1 + 1 << ' ' << x2 + 1 << ' ' << y2 + 1
         << endl;
    int res;
    cin >> res;
    return res;
  };
  vector<vector<long long> > fld(n, vector<long long>(n, -1));
  fld[0][0] = 1;
  fld[0][1] = 0;
  fld[n - 1][n - 1] = 0;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      if (j == 0 && i % 2 == 1) continue;
      if (i == 0 && j == 0) continue;
      if (i == 0 && j == 1) continue;
      if (i == n - 1 && j == n - 1) continue;
      int t;
      if (i >= 1 && j >= 1 && fld[i - 1][j - 1] != -1) {
        t = get(i - 1, j - 1, i, j);
        fld[i][j] = fld[i - 1][j - 1] ^ !t;
      } else if (j >= 2 && fld[i][j - 2] != -1) {
        t = get(i, j - 2, i, j);
        fld[i][j] = fld[i][j - 2] ^ !t;
      } else if (i >= 2 && fld[i - 2][j] != -1) {
        t = get(i - 2, j, i, j);
        fld[i][j] = fld[i - 2][j] ^ !t;
      }
    }
  }
  for (int j = n - 1; j > -1; j--) {
    for (int i = n - 1; i > -1; i--) {
      if (fld[i][j] != -1) continue;
      int t = get(i, j, i + 1, j + 1);
      fld[i][j] = fld[i + 1][j + 1] ^ !t;
    }
  }
  int st = 0;
  for (st = 0; st + 2 < n; st += 2) {
    if (fld[st][st] == 1 && fld[st + 2][st + 2] == 0) break;
  }
  auto renumerate = [&](int k) {
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < n; j++) {
        if ((i % 2) ^ (j % 2) == 1) fld[i][j] ^= k;
      }
    }
  };
  if (fld[st][st + 2] == 1) {
    if (fld[st][st + 1] == fld[st + 1][st + 2]) {
      int t = get(st, st, st + 1, st + 2);
      if (t)
        renumerate(fld[st + 1][st + 2] ^ fld[st][st]);
      else
        renumerate(fld[st + 1][st + 2] ^ fld[st][st] ^ 1);
    } else {
      int t = get(st, st + 1, st + 2, st + 2);
      if (t)
        renumerate(fld[st + 2][st + 2] ^ fld[st][st + 1]);
      else
        renumerate(fld[st + 2][st + 2] ^ fld[st][st + 1] ^ 1);
    }
  } else {
    if (fld[st][st + 1] == fld[st + 1][st + 2]) {
      int t = get(st, st + 1, st + 2, st + 2);
      if (t)
        renumerate(fld[st + 2][st + 2] ^ fld[st][st + 1]);
      else
        renumerate(fld[st + 2][st + 2] ^ fld[st][st + 1] ^ 1);
    } else {
      int t = get(st, st, st + 1, st + 2);
      if (t)
        renumerate(fld[st + 1][st + 2] ^ fld[st][st]);
      else
        renumerate(fld[st + 1][st + 2] ^ fld[st][st] ^ 1);
    }
  }
  cout << "!" << endl;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) cout << fld[i][j];
    cout << endl;
  }
  return 0;
}
