#include <bits/stdc++.h>
int a[505][505], n;
int que(int x, int y, int u, int v) {
  return printf("? %d %d %d %d\n", x, y, u, v), fflush(stdout), scanf("%d", &x),
         x;
}
int main() {
  scanf("%d", &n);
  int i, j, flag = 0;
  for (a[1][1] = 1, i = 3; i <= n; ++i)
    a[1][i] = a[1][i - 2] ^ (!que(1, i - 2, 1, i));
  for (i = 2; i <= n; ++i)
    for (j = n; j; --j)
      a[i][j] = (j ^ 1 ? (a[i - 1][j - 1] ^ (!que(i - 1, j - 1, i, j)))
                       : (a[i][j + 2] ^ (!que(i, j, i, j + 2))));
  for (i = 1; i + 2 <= n; ++i)
    if (a[i][i] && (!a[i + 2][i + 2])) {
      if (que(i, i, i + 1, i + 2))
        flag = a[i + 1][i + 2] ^ 1;
      else if (que(i, i + 1, i + 2, i + 2))
        flag = a[i][i + 1];
      else
        flag = (a[i][i + 1] ^ 1) ^
               ((a[i][i + 1] == a[i + 1][i + 2]) && a[i][i + 2]);
      break;
    }
  puts("!");
  for (i = 1; i <= n; ++i, puts(""))
    for (j = 1; j <= n; ++j) printf("%d", i + j & 1 ? a[i][j] ^ flag : a[i][j]);
  fflush(stdout);
  return 0;
}
