#include <bits/stdc++.h>
using namespace std;
int n;
int arr[51][51];
void fill_odd() {
  for (int i = 1; i <= n - 2; i += 2) {
    int inp;
    cout << "? " << i << " " << 1 << " " << i + 2 << " " << 1 << endl;
    cin >> inp;
    if (inp == 1)
      arr[i + 2][1] = arr[i][1];
    else
      arr[i + 2][1] = 1 - arr[i][1];
  }
  for (int i = 1; i <= n; i += 2)
    for (int j = 1; j <= n - 2; j += 2) {
      int inp;
      cout << "? " << i << " " << j << " " << i << " " << j + 2 << endl;
      cin >> inp;
      if (inp == 1)
        arr[i][j + 2] = arr[i][j];
      else
        arr[i][j + 2] = 1 - arr[i][j];
      if (i + 1 <= n && j + 1 <= n) {
        cout << "? " << i << " " << j << " " << i + 1 << " " << j + 1 << endl;
        cin >> inp;
        if (inp == 1)
          arr[i + 1][j + 1] = arr[i][j];
        else
          arr[i + 1][j + 1] = 1 - arr[i][j];
      }
    }
}
void execute(int st) {
  int bal = st - 1;
  int a, b;
  a = arr[bal + 2][bal + 2];
  cout << "? " << bal + 1 << " " << bal + 2 << " " << bal + 3 << " " << bal + 2
       << endl;
  cin >> b;
  int c;
  if ((a == 1 && b == 1) || (a == 0 && b == 0)) {
    cout << "? " << bal + 1 << " " << bal + 1 << " " << bal + 3 << " "
         << bal + 2 << endl;
    cin >> c;
    if (a == 1) {
      arr[bal + 1][bal + 2] = c;
      arr[bal + 3][bal + 2] = c;
    } else {
      arr[bal + 1][bal + 2] = 1 - c;
      arr[bal + 3][bal + 2] = c;
    }
  } else if ((a == 0 && b == 1) || (a == 1 && b == 0)) {
    cout << "? " << bal + 1 << " " << bal + 2 << " " << bal + 3 << " "
         << bal + 3 << endl;
    cin >> c;
    if (a == 0) {
      arr[bal + 1][bal + 2] = 1 - c;
      arr[bal + 3][bal + 2] = 1 - c;
    } else {
      arr[bal + 1][bal + 2] = 1 - c;
      arr[bal + 3][bal + 2] = c;
    }
  }
}
int main() {
  cin >> n;
  memset(arr, -1, sizeof(arr));
  arr[1][1] = 1;
  arr[n][n] = 0;
  fill_odd();
  int st = -1;
  for (int i = 1; i <= n - 2; i += 2) {
    if (arr[i][i] == 1 && arr[i + 2][i + 2] == 0) {
      st = i;
      break;
    }
  }
  execute(st);
  stack<pair<int, int>> s;
  s.push({st, st + 1});
  pair<int, int> mv[6] = {{-2, 0}, {2, 0}, {0, -2}, {0, 2}, {-1, -1}, {1, 1}};
  while (!s.empty()) {
    pair<int, int> pp = s.top();
    s.pop();
    for (int i = 0; i < 6; i++) {
      int aa = pp.first + mv[i].first, bb = pp.second + mv[i].second;
      if (aa > 0 && aa <= n && bb > 0 && bb <= n && arr[aa][bb] == -1) {
        int inp;
        cout << "? " << min(pp.first, aa) << " " << min(pp.second, bb) << " "
             << max(pp.first, aa) << " " << max(pp.second, bb) << endl;
        cin >> inp;
        if (inp == 1)
          arr[aa][bb] = arr[pp.first][pp.second];
        else
          arr[aa][bb] = 1 - arr[pp.first][pp.second];
        s.push({aa, bb});
      }
    }
  }
  cout << "!" << endl;
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) cout << arr[i][j];
    cout << endl;
  }
  return 0;
}
