#include <bits/stdc++.h>
using namespace std;
const int N = 55;
int gi() {
  int x = 0, o = 1;
  char ch = getchar();
  while (!isdigit(ch) && ch != '-') ch = getchar();
  if (ch == '-') o = -1, ch = getchar();
  while (isdigit(ch)) x = x * 10 + ch - '0', ch = getchar();
  return x * o;
}
int n, a[N][N], b[N][N], fa[N][N][N][N], fb[N][N][N][N];
int dp(int f[N][N][N][N], int a[N][N], int x1, int y1, int x2, int y2) {
  if (x1 > x2 || y1 > y2) return 0;
  if (x2 - x1 + y2 - y1 == 1) return a[x1][y1] == a[x2][y2];
  if (~f[x1][y1][x2][y2]) return f[x1][y1][x2][y2];
  return f[x1][y1][x2][y2] =
             ((a[x1][y1] == a[x2][y2]) && (dp(f, a, x1 + 1, y1, x2 - 1, y2) ||
                                           dp(f, a, x1, y1 + 1, x2 - 1, y2) ||
                                           dp(f, a, x1 + 1, y1, x2, y2 - 1) ||
                                           dp(f, a, x1, y1 + 1, x2, y2 - 1)));
}
int qry(int x1, int y1, int x2, int y2) {
  cout << '?' << ' ' << x1 << ' ' << y1 << ' ' << x2 << ' ' << y2 << endl;
  return gi();
}
void dfs(int x, int y) {
  for (int i = 0; i < 3; i++) {
    int xx = x + i, yy = y + 2 - i;
    if (xx <= n && yy <= n && (a[xx][yy] == -1))
      a[xx][yy] = a[x][y] ^ qry(x, y, xx, yy) ^ 1, dfs(xx, yy);
  }
}
int main() {
  n = gi();
  memset(a, -1, sizeof(a));
  a[1][1] = 1, a[n][n] = 0, dfs(1, 1);
  a[1][2] = 0, dfs(1, 2);
  a[2][1] = a[3][2] ^ qry(2, 1, 3, 2) ^ 1;
  dfs(2, 1);
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) b[i][j] = a[i][j] ^ ((i + j) & 1);
  memset(fa, -1, sizeof(fa));
  memset(fb, -1, sizeof(fb));
  for (int x1 = 1; x1 <= n; x1++)
    for (int y1 = 1; y1 <= n; y1++)
      for (int x2 = x1; x2 <= n; x2++)
        for (int y2 = y1; y2 <= n; y2++)
          if (x2 - x1 + y2 - y1 >= 2) {
            int u = dp(fa, a, x1, y1, x2, y2), v = dp(fb, b, x1, y1, x2, y2);
            if (u != v) {
              int fl = qry(x1, y1, x2, y2);
              puts("!");
              for (int i = 1; i <= n; i++, puts(""))
                for (int j = 1; j <= n; j++) cout << (fl == u ? a : b)[i][j];
              return 0;
            }
          }
  return 0;
}
