#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 5;
const int mod = 998244353;
const int INF = 2e9;
int G[55][55], G2[55][55];
int main() {
  int n;
  scanf("%d", &n);
  G[1][1] = 1, G[n][n] = 0;
  for (int i = 4; i < n * 2; i += 2) {
    for (int j = 1; j <= n; j++) {
      if (i - j > n) continue;
      if (j >= i) break;
      if (j == 1) {
        printf("? %d %d %d %d\n", j, i - j - 2, j, i - j);
        fflush(stdout);
        int x;
        scanf("%d", &x);
        if (x)
          G[j][i - j] = G[j][i - j - 2];
        else
          G[j][i - j] = G[j][i - j - 2] ^ 1;
      } else if (i - j == 1) {
        printf("? %d %d %d %d\n", j - 2, i - j, j, i - j);
        fflush(stdout);
        int x;
        scanf("%d", &x);
        if (x)
          G[j][i - j] = G[j - 2][i - j];
        else
          G[j][i - j] = G[j - 2][i - j] ^ 1;
      } else {
        printf("? %d %d %d %d\n", j - 1, i - j - 1, j, i - j);
        fflush(stdout);
        int x;
        scanf("%d", &x);
        if (x)
          G[j][i - j] = G[j - 1][i - j - 1];
        else
          G[j][i - j] = G[j - 1][i - j - 1] ^ 1;
      }
    }
  }
  for (int i = 5; i < n * 2; i += 2) {
    for (int j = 2; j <= n; j++) {
      if (i - j > n) continue;
      if (i - j < 1) break;
      if (j == 2) {
        printf("? %d %d %d %d\n", i - j - 2, j, i - j, j);
        fflush(stdout);
        int x;
        scanf("%d", &x);
        if (x)
          G2[i - j][j] = G2[i - j - 2][j];
        else
          G2[i - j][j] = G2[i - j - 2][j] ^ 1;
      } else if (i - j == 1) {
        printf("? %d %d %d %d\n", i - j, j - 2, i - j, j);
        fflush(stdout);
        int x;
        scanf("%d", &x);
        if (x)
          G2[i - j][j] = G2[i - j][j - 2];
        else
          G2[i - j][j] = G2[i - j][j - 2] ^ 1;
      } else {
        printf("? %d %d %d %d\n", i - j - 1, j - 1, i - j, j);
        fflush(stdout);
        int x;
        scanf("%d", &x);
        if (x)
          G2[i - j][j] = G2[i - j - 1][j - 1];
        else
          G2[i - j][j] = G2[i - j - 1][j - 1] ^ 1;
      }
    }
  }
  printf("? 2 1 3 2\n");
  fflush(stdout);
  int x;
  scanf("%d", &x);
  if (x)
    G2[2][1] = G2[3][2];
  else
    G2[2][1] = G2[3][2] ^ 1;
  for (int i = 4; i <= n; i += 2) {
    printf("? %d 1 %d 1\n", i - 2, i);
    fflush(stdout);
    scanf("%d", &x);
    if (x)
      G2[i][1] = G2[i - 2][1];
    else
      G2[i][1] = G2[i - 2][1] ^ 1;
  }
  int bd = 3;
  int y;
  while (G[bd][bd] == G[bd - 2][bd - 2]) bd += 2;
  if (G2[bd - 2][bd - 1] == G2[bd][bd - 1]) {
    if (G[bd - 2][bd - 2] == G[bd - 1][bd - 1]) {
      printf("? %d %d %d %d\n", bd - 2, bd - 2, bd, bd - 1);
      fflush(stdout);
      scanf("%d", &x);
      if (x)
        y = G[bd - 2][bd - 2] ^ G2[bd - 2][bd - 1];
      else
        y = G[bd - 2][bd - 2] ^ G2[bd - 2][bd - 1] ^ 1;
    } else {
      printf("? %d %d %d %d\n", bd - 2, bd - 1, bd, bd);
      fflush(stdout);
      scanf("%d", &x);
      if (x)
        y = G[bd - 1][bd - 1] ^ G2[bd - 2][bd - 1];
      else
        y = G[bd - 1][bd - 1] ^ G2[bd - 2][bd - 1] ^ 1;
    }
  } else {
    if (G[bd - 2][bd - 2] == G[bd - 1][bd - 1]) {
      printf("? %d %d %d %d\n", bd - 2, bd - 1, bd, bd);
      fflush(stdout);
      scanf("%d", &x);
      if (x)
        y = G[bd - 1][bd - 1] ^ G2[bd][bd - 1];
      else
        y = G[bd - 1][bd - 1] ^ G2[bd][bd - 1] ^ 1;
    } else {
      printf("? %d %d %d %d\n", bd - 2, bd - 2, bd, bd - 1);
      fflush(stdout);
      scanf("%d", &x);
      if (x)
        y = G[bd - 2][bd - 2] ^ G2[bd][bd - 1];
      else
        y = G[bd - 2][bd - 2] ^ G2[bd][bd - 1] ^ 1;
    }
  }
  for (int i = 3; i <= n * 2; i += 2) {
    for (int j = 1; j <= n; j++) {
      if (i - j > n) continue;
      if (i - j < 1) break;
      G[j][i - j] = G2[j][i - j] ^ y;
    }
  }
  puts("!");
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      printf("%d", G[i][j]);
    }
    puts("");
  }
  fflush(stdout);
  return 0;
}
