#include <bits/stdc++.h>
using namespace std;
bool b[55][55];
bool vi[55][55];
queue<pair<int, int> > q;
int main() {
  ios::sync_with_stdio(false);
  int n;
  cin >> n;
  b[1][1] = 1;
  b[n][n] = 0;
  vi[1][1] = vi[n][n] = 1;
  q.push({1, 1});
  while (!q.empty()) {
    int x = q.front().first;
    int y = q.front().second;
    q.pop();
    if (x < n && y < n && !vi[x + 1][y + 1]) {
      cout << "? " << x << ' ' << y << ' ' << x + 1 << ' ' << y + 1 << endl;
      bool p;
      cin >> p;
      b[x + 1][y + 1] = b[x][y] ^ (!p);
      vi[x + 1][y + 1] = 1;
      q.push({x + 1, y + 1});
    }
    if (x + 1 < n && !vi[x + 2][y]) {
      cout << "? " << x << ' ' << y << ' ' << x + 2 << ' ' << y << endl;
      bool p;
      cin >> p;
      b[x + 2][y] = b[x][y] ^ (!p);
      vi[x + 2][y] = 1;
      q.push({x + 2, y});
    }
    if (y + 1 < n && !vi[x][y + 2]) {
      cout << "? " << x << ' ' << y << ' ' << x << ' ' << y + 2 << endl;
      bool p;
      cin >> p;
      b[x][y + 2] = b[x][y] ^ (!p);
      vi[x][y + 2] = 1;
      q.push({x, y + 2});
    }
  }
  for (int i = 2; i < n; i++) {
    if (b[i - 1][i - 1] != b[i + 1][i + 1]) {
      cout << "? " << i - 1 << ' ' << i << ' ' << i << ' ' << i + 1 << endl;
      bool p;
      cin >> p;
      if (p) {
        if (b[i - 1][i - 1] == b[i][i]) {
          cout << "? " << i - 1 << ' ' << i - 1 << ' ' << i << ' ' << i + 1
               << endl;
          bool p;
          cin >> p;
          b[i - 1][i] = b[i][i] ^ (!p);
          b[i][i + 1] = b[i][i] ^ (!p);
        } else {
          cout << "? " << i - 1 << ' ' << i << ' ' << i + 1 << ' ' << i + 1
               << endl;
          bool p;
          cin >> p;
          b[i - 1][i] = b[i][i] ^ (!p);
          b[i][i + 1] = b[i][i] ^ (!p);
        }
      } else {
        if (b[i - 1][i - 1] != b[i][i]) {
          cout << "? " << i - 1 << ' ' << i - 1 << ' ' << i << ' ' << i + 1
               << endl;
          bool p;
          cin >> p;
          b[i - 1][i] = b[i][i] ^ (!p);
          b[i][i + 1] = b[i - 1][i - 1] ^ (!p);
        } else {
          cout << "? " << i - 1 << ' ' << i << ' ' << i + 1 << ' ' << i + 1
               << endl;
          bool p;
          cin >> p;
          b[i - 1][i] = b[i + 1][i + 1] ^ (!p);
          b[i][i + 1] = b[i][i] ^ (!p);
        }
      }
      vi[i - 1][i] = 1;
      vi[i][i + 1] = 1;
      q.push({i - 1, i});
      q.push({i, i + 1});
      break;
    }
  }
  while (!q.empty()) {
    int x = q.front().first;
    int y = q.front().second;
    q.pop();
    if (x < n && y < n && !vi[x + 1][y + 1]) {
      cout << "? " << x << ' ' << y << ' ' << x + 1 << ' ' << y + 1 << endl;
      bool p;
      cin >> p;
      b[x + 1][y + 1] = b[x][y] ^ (!p);
      vi[x + 1][y + 1] = 1;
      q.push({x + 1, y + 1});
    }
    if (x > 1 && y > 1 && !vi[x - 1][y - 1]) {
      cout << "? " << x - 1 << ' ' << y - 1 << ' ' << x << ' ' << y << endl;
      bool p;
      cin >> p;
      b[x - 1][y - 1] = b[x][y] ^ (!p);
      vi[x - 1][y - 1] = 1;
      q.push({x - 1, y - 1});
    }
    if (x + 1 < n && !vi[x + 2][y]) {
      cout << "? " << x << ' ' << y << ' ' << x + 2 << ' ' << y << endl;
      bool p;
      cin >> p;
      b[x + 2][y] = b[x][y] ^ (!p);
      vi[x + 2][y] = 1;
      q.push({x + 2, y});
    }
    if (y + 1 < n && !vi[x][y + 2]) {
      cout << "? " << x << ' ' << y << ' ' << x << ' ' << y + 2 << endl;
      bool p;
      cin >> p;
      b[x][y + 2] = b[x][y] ^ (!p);
      vi[x][y + 2] = 1;
      q.push({x, y + 2});
    }
    if (y > 2 && !vi[x][y - 2]) {
      cout << "? " << x << ' ' << y - 2 << ' ' << x << ' ' << y << endl;
      bool p;
      cin >> p;
      b[x][y - 2] = b[x][y] ^ (!p);
      vi[x][y - 2] = 1;
      q.push({x, y - 2});
    }
  }
  cout << "!\n";
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      cout << b[i][j];
    }
    cout << endl;
  }
}
