#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 1000011;
const long long INF = (1 << 29) + 123;
const long long MOD = 1000000007;
const long double PI = 4 * atan((long double)1);
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  int n;
  cin >> n;
  int board[n + 1][n + 1][2];
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++) board[i + 1][j + 1][0] = -1;
  board[1][1][0] = 1;
  board[1][2][0] = 1;
  board[n][n][0] = 0;
  int res = 0;
  int count = 0;
  for (int i = 0; i < n / 2; i++) {
    printf("? %d %d %d %d\n", 1, 2 * i + 1, 2, 2 * i + 2);
    count++;
    fflush(stdout);
    cin >> res;
    if (res == -1) exit(0);
    board[2][2 * i + 2][0] = (1 - res) ^ board[1][2 * i + 1][0];
    printf("? %d %d %d %d\n", 1, 2 * i + 1, 1, 2 * i + 3);
    count++;
    fflush(stdout);
    cin >> res;
    if (res == -1) exit(0);
    board[1][2 * i + 3][0] = (1 - res) ^ board[1][2 * i + 1][0];
    printf("? %d %d %d %d\n", 1, 2 * i + 2, 2, 2 * i + 3);
    count++;
    fflush(stdout);
    cin >> res;
    if (res == -1) exit(0);
    board[2][2 * i + 3][0] = (1 - res) ^ board[1][2 * i + 2][0];
    if (i == n / 2 - 1) break;
    printf("? %d %d %d %d\n", 1, 2 * i + 2, 1, 2 * i + 4);
    count++;
    fflush(stdout);
    cin >> res;
    if (res == -1) exit(0);
    board[1][2 * i + 4][0] = (1 - res) ^ board[1][2 * i + 2][0];
  }
  cout << "? 2 1 2 3" << endl;
  count++;
  fflush(stdout);
  cin >> res;
  if (res == -1) exit(0);
  board[2][1][0] = (1 - res) ^ board[2][3][0];
  for (int i = 1; i < n + 1; i++) {
    for (int j = 3; j < n + 1; j++) {
      printf("? %d %d %d %d\n", j - 2, i, j, i);
      count++;
      fflush(stdout);
      cin >> res;
      if (res == -1) exit(0);
      board[j][i][0] = (1 - res) ^ board[j - 2][i][0];
    }
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      if ((i + j) % 2)
        board[i + 1][j + 1][1] = 1 - board[i + 1][j + 1][0];
      else
        board[i + 1][j + 1][1] = board[i + 1][j + 1][0];
    }
  }
  int dp[n + 1][n + 1][n + 1][n + 1][2];
  for (int dx = 0; dx < n; dx++) {
    for (int dy = 0; dy < n; dy++) {
      for (int i = 1; i < n + 1; i++) {
        for (int j = 1; j < n + 1; j++) {
          if (i + dx > n || j + dy > n) continue;
          for (int k = 0; k < 2; k++) {
            if (dx + dy == 0) {
              dp[i][j][i][j][k] = 1;
              continue;
            }
            dp[i][j][i + dx][j + dy][k] = 0;
            if (board[i][j][k] == board[i + dx][j + dy][k]) {
              if (dx + dy == 1) dp[i][j][i + dx][j + dy][k] = 1;
              if ((dx > 0 && dy > 0 && dp[i + 1][j][i + dx][j + dy - 1][k]) ||
                  (dx > 0 && dy > 0 && dp[i][j + 1][i + dx - 1][j + dy][k]) ||
                  (dx > 1 && dp[i + 1][j][i + dx - 1][j + dy][k]) ||
                  (dy > 1 && dp[i][j + 1][i + dx][j + dy - 1][k])) {
                dp[i][j][i + dx][j + dy][k] = 1;
              }
            }
          }
          if (dx + dy > 1 &&
              dp[i][j][i + dx][j + dy][0] != dp[i][j][i + dx][j + dy][1]) {
            printf("? %d %d %d %d\n", i, j, i + dx, j + dy);
            count++;
            fflush(stdout);
            cin >> res;
            if (res == -1) exit(0);
            int x = res == dp[i][j][i + dx][j + dy][0] ? 0 : 1;
            cout << "!" << endl;
            for (int i = 0; i < n; i++) {
              for (int j = 0; j < n; j++) {
                cout << board[i + 1][j + 1][x];
              }
              cout << endl;
            }
            fflush(stdout);
            exit(0);
          }
        }
      }
    }
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      for (int ii = i; ii < n; ii++) {
        for (int jj = j; jj < n; jj++) {
          printf("%d %d %d %d: %d %d\n", i + 1, j + 1, ii + 1, jj + 1,
                 dp[i + 1][j + 1][ii + 1][jj + 1][0],
                 dp[i + 1][j + 1][ii + 1][jj + 1][1]);
        }
      }
    }
  }
  cout << count << endl;
  return 0;
}
