#include <bits/stdc++.h>
using namespace std;
const int dx[] = {3, 2, 1, 0};
const int dy[] = {0, 1, 2, 3};
int n;
int a[55][55];
bool rev, was;
void gao(int ax, int ay, int bx, int by) {
  cout << "? " << ax << " " << ay << " " << bx << " " << by << '\n';
  fflush(stdout);
  int p;
  cin >> p;
  if (p == 1)
    a[bx][by] = a[ax][ay];
  else
    a[bx][by] = 1 - a[ax][ay];
}
void revgao(int ax, int ay, int bx, int by) {
  cout << "? " << ax << " " << ay << " " << bx << " " << by << '\n';
  fflush(stdout);
  int p;
  cin >> p;
  if (p == 1)
    a[ax][ay] = a[bx][by];
  else
    a[ax][ay] = 1 - a[bx][by];
}
inline bool ok(int ax, int ay, int bx, int by) {
  if (a[ax][ay] != a[bx][by]) return 0;
  if (ax == bx && a[ax][ay + 1] == a[ax][ay + 2]) return 1;
  if (ax == bx) return 0;
  if (ay == by && a[ax + 1][ay] == a[ax + 2][ay]) return 1;
  if (ay == by) return 0;
  if (ax + 1 == bx) {
    if (a[ax][ay + 1] == a[ax][ay + 2]) return 1;
    if (a[ax + 1][ay] == a[ax + 1][ay + 1]) return 1;
    if (a[ax][ay + 1] == a[ax + 1][ay + 1]) return 1;
  } else {
    if (a[ax + 1][ay] == a[ax + 2][ay]) return 1;
    if (a[ax][ay + 1] == a[ax + 1][ay + 1]) return 1;
    if (a[ax + 1][ay] == a[ax + 1][ay + 1]) return 1;
  }
  return 0;
}
int main() {
  cin >> n;
  a[1][1] = 1;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) {
      if ((i + j) % 2) continue;
      if (i == 1 && j == 1) continue;
      if (i == n && j == n) continue;
      if (i == 1) gao(1, j - 2, 1, j);
      if (j == 1) gao(i - 2, 1, i, 1);
      if (i != 1 && j != 1) gao(i - 1, j - 1, i, j);
    }
  a[1][2] = 1;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) {
      if ((i + j) % 2 == 0) continue;
      if (i == 1 && j == 2) continue;
      if (i == 1) gao(1, j - 2, 1, j);
      if (j == 1) continue;
      if (i != 1 && j != 1)
        if (j != 2)
          gao(i - 1, j - 1, i, j);
        else
          gao(i - 2, j, i, j);
    }
  for (int i = 1; i <= n; i++)
    if ((1 + i) % 2) revgao(i, 1, i, 3);
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++)
      for (int s = 0; s < 4; s++) {
        if (was) break;
        int ii = i + dx[s];
        int jj = j + dy[s];
        if (ii > n || jj > n) continue;
        if (!ok(i, j, ii, jj)) continue;
        cout << "? " << i << " " << j << " " << ii << " " << jj << '\n';
        fflush(stdout);
        int p;
        cin >> p;
        if (p == 0) rev = 1;
        was = 1;
        break;
      }
  if (!was) {
    for (int i = 1; i <= n; i++)
      for (int j = 1; j <= n; j++)
        if ((i + j) % 2 == 1) a[i][j] = 1 - a[i][j];
    for (int i = 1; i <= n; i++)
      for (int j = 1; j <= n; j++)
        for (int s = 0; s < 4; s++) {
          if (was) break;
          int ii = i + dx[s];
          int jj = j + dy[s];
          if (ii > n || jj > n) continue;
          if (!ok(i, j, ii, jj)) continue;
          cout << "? " << i << " " << j << " " << ii << " " << jj << '\n';
          fflush(stdout);
          int p;
          cin >> p;
          if (p == 0) rev = 1;
          was = 1;
          break;
        }
  }
  cout << "!\n";
  for (int i = 1; i <= n; i++, cout << '\n')
    for (int j = 1; j <= n; j++)
      if ((i + j) % 2 && rev)
        cout << 1 - a[i][j];
      else
        cout << a[i][j];
  return 0;
}
