#include <bits/stdc++.h>
using namespace std;
int X[] = {0, 0, -2, 2, 1};
int Y[] = {-2, 2, 0, 0, 1};
int XX[] = {0, 1, 0, -1};
int YY[] = {1, 0, -1, 0};
int n, ttrue = 0, rs[2][55][55];
bool F[2][55][55][55][55], Free[2][55][55][55][55];
int Ask(int u1, int v1, int u2, int v2) {
  if (u1 > u2) swap(u1, u2);
  if (v1 > v2) swap(v1, v2);
  cout << "? " << u1 << ' ' << v1 << ' ' << u2 << ' ' << v2 << "\n";
  fflush(stdout);
  cin >> u1;
  return u1;
}
void DFS(int u, int v) {
  for (int i = 0; i < 5; i++) {
    int uu = u + X[i];
    int vv = v + Y[i];
    if (uu <= n && vv <= n && rs[0][uu][vv] == -1) {
      int tmp = Ask(u, v, uu, vv);
      rs[0][uu][vv] = (tmp == 1 ? rs[0][u][v] : rs[0][u][v] ^ 1);
      DFS(uu, vv);
    }
  }
}
int DP(int t, int u1, int v1, int u2, int v2) {
  if (rs[t][u1][v1] != rs[t][u2][v2]) return false;
  if (u1 == u2 && v1 + 1 == v2) return true;
  if (v1 == v2 && u1 + 1 == u2) return true;
  if (Free[t][u1][v1][u2][v2] == true) return F[t][u1][v1][u2][v2];
  Free[t][u1][v1][u2][v2] = true;
  for (int i = 0; i < 2; i++)
    for (int j = 2; j < 4; j++) {
      int uu1 = u1 + XX[i];
      int vv1 = v1 + YY[i];
      int uu2 = u2 + XX[j];
      int vv2 = v2 + YY[j];
      if (uu1 <= uu2 && vv1 <= vv2 && DP(t, uu1, vv1, uu2, vv2) == true)
        return F[t][u1][v1][u2][v2] = true;
    }
  return F[t][u1][v1][u2][v2];
}
void FindTrueResult() {
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++)
      for (int i1 = i; i1 <= n; i1++)
        for (int j1 = j; j1 <= n; j1++)
          if ((i + j) % 2 != (i1 + j1) % 2 && i + j + 2 <= i1 + j1 &&
              DP(0, i, j, i1, j1) != DP(1, i, j, i1, j1)) {
            int tmp = Ask(i, j, i1, j1);
            if (tmp == DP(1, i, j, i1, j1)) ttrue = 1;
            return;
          }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin >> n;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) rs[0][i][j] = -1;
  rs[0][1][1] = 1;
  rs[0][2][1] = 0;
  rs[0][n][n] = 0;
  DFS(1, 1);
  DFS(2, 1);
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++)
      rs[1][i][j] = ((i + j) % 2 == 0 ? rs[0][i][j] : rs[0][i][j] ^ 1);
  FindTrueResult();
  cout << "!\n";
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) cout << rs[ttrue][i][j];
    cout << "\n";
  }
  fflush(stdout);
}
