#include <bits/stdc++.h>
using namespace std;
int n;
int a[59][59];
const int dx[9] = {0, 0, 2, -2, 1, -1};
const int dy[9] = {2, -2, 0, 0, 1, -1};
void bfs() {
  queue<pair<int, int> > q;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++)
      if (a[i][j] != -1 && (i + j) % 2) q.push(pair<int, int>(i, j));
  while (!q.empty()) {
    pair<int, int> p1 = q.front();
    q.pop();
    for (int i = 0; i < 6; i++) {
      int tx = p1.first + dx[i], ty = p1.second + dy[i];
      if (tx < 1 || tx > n || ty < 1 || ty > n) continue;
      if (a[tx][ty] != -1) continue;
      if (tx <= p1.first && ty <= p1.second) {
        cout << "? " << tx << " " << ty << " " << p1.first << " " << p1.second
             << endl;
        cout.flush();
        int t;
        cin >> t;
        if (t)
          a[tx][ty] = a[p1.first][p1.second];
        else
          a[tx][ty] = 1 - a[p1.first][p1.second];
      } else {
        cout << "? " << p1.first << " " << p1.second << " " << tx << " " << ty
             << endl;
        cout.flush();
        int t;
        cin >> t;
        if (t)
          a[tx][ty] = a[p1.first][p1.second];
        else
          a[tx][ty] = 1 - a[p1.first][p1.second];
      }
      q.push(pair<int, int>(tx, ty));
    }
  }
}
int main() {
  cin >> n;
  memset(a, -1, sizeof(a));
  a[1][1] = 1, a[n][n] = 0;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++)
      if ((i + j) % 2 == 0) {
        if (i == 1 && j == 1) continue;
        if (i == n && j == n) continue;
        int x, y;
        x = i, y = j;
        if (i > 2)
          x -= 2;
        else if (j > 2)
          y -= 2;
        else
          x--, y--;
        cout << "? " << x << " " << y << " " << i << " " << j << endl;
        cout.flush();
        int t;
        cin >> t;
        if (t)
          a[i][j] = a[x][y];
        else
          a[i][j] = 1 - a[x][y];
      }
  int x, y;
  for (int i = 1; i <= n - 2; i++)
    if (a[i][i] != a[i + 2][i + 2]) {
      int x1 = i, y1 = i + 1, x2 = i + 1, y2 = i + 2;
      cout << "? " << x1 << " " << y1 << " " << x2 << " " << y2 << endl;
      cout.flush();
      int t;
      cin >> t;
      if (t) {
        if (a[i + 1][i + 1] == a[i][i])
          y1 = i;
        else
          x2 = i + 2;
        cout << "? " << x1 << " " << y1 << " " << x2 << " " << y2 << endl;
        cout.flush();
        int t;
        cin >> t;
        if (t) {
          if (y1 == i)
            a[x2][y2] = a[x1][y1];
          else
            a[x1][y1] = a[x2][y2];
        } else {
          if (y1 == i)
            a[x2][y2] = 1 - a[x1][y1];
          else
            a[x1][y1] = 1 - a[x2][y2];
        }
      } else {
        if (a[i + 1][i + 1] != a[i][i])
          y1 = i;
        else
          x2 = i + 2;
        cout << "? " << x1 << " " << y1 << " " << x2 << " " << y2 << endl;
        cout.flush();
        int t;
        cin >> t;
        if (t) {
          if (y1 == i)
            a[x2][y2] = a[x1][y1];
          else
            a[x1][y1] = a[x2][y2];
        } else {
          if (y1 == i)
            a[x2][y2] = 1 - a[x1][y1];
          else
            a[x1][y1] = 1 - a[x2][y2];
        }
      }
      break;
    }
  bfs();
  cout << "!\n";
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) cout << a[i][j];
    cout << endl;
  }
  cout.flush();
  return 0;
}
