#include <bits/stdc++.h>
using namespace std;
int n, i, j, x, flag = 0;
int a[55][55], b[55][55];
inline int Abs(int x) { return (x < 0) ? -x : x; }
inline void Swap(int &a, int &b) { a ^= b ^= a ^= b; }
inline int Min(int a, int b) { return (a < b) ? a : b; }
inline int Max(int a, int b) { return (a > b) ? a : b; }
inline int read() {
  int p = 0;
  char c = getchar();
  while (c < 48 || c > 57) c = getchar();
  while (c >= 48 && c <= 57) p = (p << 1) + (p << 3) + c - 48, c = getchar();
  return p;
}
inline bool Check(int p, int q) {
  int a = ((b[p][q] == b[p + 1][q + 2]) && (b[p][q + 1] == b[p][q + 2]));
  int c = ((b[p][q] == b[p + 1][q + 2]) && (b[p + 1][q] == b[p + 1][q + 1]));
  return a | c;
}
inline bool Work(int p, int q) {
  printf("? %d %d %d %d\n", p, q, p + 1, q + 2);
  fflush(stdout);
  scanf("%d", &x);
  return x;
}
int main() {
  scanf("%d", &n);
  a[1][1] = 1;
  a[n][n] = 0;
  a[1][2] = -2;
  for (i = 3; i <= n; i++) {
    printf("? %d %d %d %d\n", 1, i - 2, 1, i);
    fflush(stdout);
    scanf("%d", &x);
    if (x)
      a[1][i] = a[1][i - 2];
    else
      a[1][i] = (a[1][i - 2] >= 0) ? 1 - a[1][i - 2] : -5 - a[1][i - 2];
  }
  for (i = 2; i <= n; i++) {
    for (j = 2; j <= n; j++) {
      if (i + j == 2 * n) break;
      printf("? %d %d %d %d\n", i - 1, j - 1, i, j);
      fflush(stdout);
      scanf("%d", &x);
      if (x)
        a[i][j] = a[i - 1][j - 1];
      else
        a[i][j] =
            (a[i - 1][j - 1] >= 0) ? 1 - a[i - 1][j - 1] : -5 - a[i - 1][j - 1];
    }
    printf("? %d %d %d %d\n", i, 1, i, 3);
    fflush(stdout);
    scanf("%d", &x);
    if (x)
      a[i][1] = a[i][3];
    else
      a[i][1] = (a[i][3] >= 0) ? 1 - a[i][3] : -5 - a[i][3];
  }
  for (i = 1; i <= n; i++)
    for (j = 1; j <= n; j++) b[i][j] = (a[i][j] >= 0) ? a[i][j] : a[i][j] + 3;
  for (i = 1; i <= n - 1; i++)
    for (j = 1; j <= n - 2; j++)
      if (Check(i, j)) {
        if (Work(i, j)) {
          cout << "!" << endl;
          for (i = 1; i <= n; i++) {
            for (j = 1; j <= n; j++) printf("%d", b[i][j]);
            cout << endl;
          }
        } else {
          flag = 1;
          goto END;
        }
        return 0;
      }
END:
  if (flag) {
    cout << "!" << endl;
    for (i = 1; i <= n; i++) {
      for (j = 1; j <= n; j++)
        printf("%d", (a[i][j] >= 0) ? a[i][j] : -2 - a[i][j]);
      cout << endl;
    }
    return 0;
  }
  for (i = 1; i <= n; i++)
    for (j = 1; j <= n; j++) b[i][j] = (a[i][j] >= 0) ? a[i][j] : -2 - a[i][j];
  for (i = 1; i <= n - 1; i++)
    for (j = 1; j <= n - 2; j++)
      if (Check(i, j)) {
        if (Work(i, j)) {
          cout << "!" << endl;
          for (i = 1; i <= n; i++) {
            for (j = 1; j <= n; j++) printf("%d", b[i][j]);
            cout << endl;
          }
        } else
          goto END2;
        return 0;
      }
END2:
  cout << "!" << endl;
  for (i = 1; i <= n; i++) {
    for (j = 1; j <= n; j++)
      printf("%d", (a[i][j] >= 0) ? a[i][j] : 3 + a[i][j]);
    cout << endl;
  }
  return 0;
}
