#include <bits/stdc++.h>
using namespace std;
using LL = long long;
using PII = pair<int, int>;
const int N = 51;
int g[2][N][N];
int n, f[2][N][N][N][N];
int dp(int idx, int x1, int y1, int x2, int y2) {
  if (x1 == y1 && x2 == y2) return 1;
  if (x1 > x2 || y1 > y2) return 0;
  if (x1 < 1 || x1 > n || y1 < 1 || y1 > n || x2 < 1 || x2 > n || y2 < 1 ||
      y2 > n)
    return 0;
  int &ans = f[idx][x1][x2][y1][y2];
  if (ans != -1) return ans;
  if (g[idx][x1][y1] != g[idx][x2][y2]) return ans = 0;
  if ((x2 - x1) + (y2 - y1) == 1) return ans = 1;
  if (dp(idx, x1 + 1, y1, x2 - 1, y2) || dp(idx, x1 + 1, y1, x2, y2 - 1) ||
      dp(idx, x1, y1 + 1, x2 - 1, y2) || dp(idx, x1, y1 + 1, x2, y2 - 1))
    return ans = 1;
  return ans = 0;
}
int ask(int x1, int y1, int x2, int y2) {
  cout << "? " << x1 << ' ' << y1 << ' ' << x2 << ' ' << y2 << endl;
  int ret;
  cin >> ret;
  if (ret == -1) exit(1);
  return ret;
}
void print(int idx) {
  cout << "!" << endl;
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      cout << g[idx][i][j];
    }
    cout << endl;
  }
}
int main() {
  ios::sync_with_stdio(false);
  memset(f, -1, sizeof f);
  memset(g, -1, sizeof g);
  cin >> n;
  for (int i = 1; i <= n; i += 1) {
    for (int j = 1; j <= n; j += 1) {
      if ((i & 1) && (j & 1)) {
        if (i == 1 && j == 1) {
          g[0][i][j] = g[1][i][j] = 1;
        } else if (i == n && j == n) {
          g[0][i][j] = g[1][i][j] = 0;
        } else {
          if (j == 1) {
            int ret = ask(i - 2, j, i, j);
            g[0][i][j] = g[1][i][j] = (ret ? g[0][i - 2][j] : !g[0][i - 2][j]);
          } else {
            int ret = ask(i, j - 2, i, j);
            g[0][i][j] = g[1][i][j] = (ret ? g[0][i][j - 2] : !g[0][i][j - 2]);
          }
        }
      } else if ((~i & 1) && (~j & 1)) {
        int ret = ask(i - 1, j - 1, i, j);
        g[0][i][j] = g[1][i][j] =
            (ret ? g[0][i - 1][j - 1] : !g[0][i - 1][j - 1]);
      } else {
        if (i == 1 && j == 2) {
          g[0][i][j] = 0, g[1][i][j] = 1;
        } else
          continue;
      }
    }
  }
  for (int i = 1; i <= n; i++) {
    if (i & 1) {
      for (int j = 2; j < n; j += 2) {
        if (i == 1 && j == 2)
          continue;
        else if (j == 2) {
          int ret = ask(i - 1, j - 1, i, j);
          g[0][i][j] = ret ? g[0][i - 1][j - 1] : !g[0][i - 1][j - 1];
          g[1][i][j] = ret ? g[1][i - 1][j - 1] : !g[1][i - 1][j - 1];
        } else {
          int ret = ask(i, j - 2, i, j);
          g[0][i][j] = ret ? g[0][i][j - 2] : !g[0][i][j - 2];
          g[1][i][j] = ret ? g[1][i][j - 2] : !g[1][i][j - 2];
        }
      }
    } else {
      for (int j = n; j >= 1; j -= 2) {
        if (j == 1) {
          int ret = ask(i, j, i, j + 2);
          g[0][i][j] = ret ? g[0][i][j + 2] : !g[0][i][j + 2];
          g[1][i][j] = ret ? g[1][i][j + 2] : !g[1][i][j + 2];
        } else {
          int ret = ask(i - 1, j - 1, i, j);
          g[0][i][j] = ret ? g[0][i - 1][j - 1] : !g[0][i - 1][j - 1];
          g[1][i][j] = ret ? g[1][i - 1][j - 1] : !g[1][i - 1][j - 1];
        }
      }
    }
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      for (int k = i; k <= n; k++) {
        for (int l = j; l <= n; l++) {
          if ((k - i) + (l - j) < 2) continue;
          int d1 = dp(0, i, j, k, l);
          int d2 = dp(1, i, j, k, l);
          if (d1 != d2) {
            int ret = ask(i, j, k, l);
            if (ret == d1)
              print(0);
            else
              print(1);
            return 0;
          }
        }
      }
    }
  }
}
