#include <bits/stdc++.h>
using namespace std;
class trio {
 public:
  long long first, second, third;
};
long long n;
void print(long long mat[60][60]) {
  cout << "!\n" << flush;
  for (long long i = 0; i < n; ++i) {
    for (long long j = 0; j < n; ++j) {
      cout << mat[i][j] << flush;
    }
    cout << endl << flush;
  }
}
int32_t main() {
  cin >> n;
  long long x;
  long long mat1[60][60] = {0};
  long long mat2[60][60] = {0};
  long long mat3[60][60] = {0};
  mat1[0][0] = 1;
  mat1[n - 1][n - 1] = 0;
  for (long long j = 0; j < n; ++j) {
    if (j > 0) {
      if (j % 2) {
        cout << "? " << 0 + 1 << " " << j - 1 + 1 << " " << 1 + 1 << " "
             << j + 1 << endl
             << flush;
        cin >> x;
        if (x == 1) {
          mat1[1][j] = mat1[0][j - 1];
        } else {
          mat1[1][j] = 1 ^ mat1[0][j - 1];
        }
      } else {
        cout << "? " << 0 + 1 << " " << j - 2 + 1 << " " << 0 + 1 << " "
             << j + 1 << endl
             << flush;
        cin >> x;
        if (x == 1) {
          mat1[0][j] = mat1[0][j - 2];
        } else {
          mat1[0][j] = 1 ^ mat1[0][j - 2];
        }
      }
    }
    for (long long i = j % 2; i < n - 2; i += 2) {
      cout << "? " << i + 1 << " " << j + 1 << " " << i + 2 + 1 << " " << j + 1
           << endl
           << flush;
      cin >> x;
      if (x == 1) {
        mat1[i + 2][j] = mat1[i][j];
      } else {
        mat1[i + 2][j] = 1 ^ (mat1[i][j]);
      }
    }
  }
  mat2[1][0] = 1;
  for (long long j = 0; j < n; ++j) {
    if (j > 0) {
      if (j % 2) {
        cout << "? " << 1 + 1 << " " << j - 1 + 1 << " " << 2 + 1 << " "
             << j + 1 << endl
             << flush;
        cin >> x;
        if (x == 1) {
          mat2[2][j] = mat2[1][j - 1];
        } else {
          mat2[2][j] = 1 ^ (mat2[1][j - 1]);
        }
      } else {
        cout << "? " << 1 + 1 << " " << j - 2 + 1 << " " << 1 + 1 << " "
             << j + 1 << endl
             << flush;
        cin >> x;
        if (x == 1) {
          mat2[1][j] = mat2[1][j - 2];
        } else {
          mat2[1][j] = 1 ^ mat2[1][j - 2];
        }
      }
    }
    for (long long i = ((j % 2) ? 2 : 1); i < n - 2; i += 2) {
      cout << "? " << i + 1 << " " << j + 1 << " " << i + 2 + 1 << " " << j + 1
           << endl
           << flush;
      cin >> x;
      if (x == 1) {
        mat2[i + 2][j] = mat2[i][j];
      } else {
        mat2[i + 2][j] = 1 ^ (mat2[i][j]);
      }
    }
  }
  cout << "? " << 0 + 1 << " " << 1 + 1 << " " << 1 + 1 << " " << 2 + 1 << endl
       << flush;
  cin >> x;
  if (x == 1) {
    mat2[0][1] = mat2[1][2];
  } else {
    mat2[0][1] = 1 ^ (mat2[1][2]);
  }
  for (long long j = 1; j < n - 2; j += 2) {
    cout << "? " << 0 + 1 << " " << j + 1 << " " << 0 + 1 << " " << j + 2 + 1
         << endl
         << flush;
    cin >> x;
    if (x == 1) {
      mat2[0][j + 2] = mat2[0][j];
    } else {
      mat2[0][j + 2] = 1 ^ (mat2[0][j]);
    }
  }
  for (long long i = 0; i < n; ++i) {
    for (long long j = 0; j < n; ++j) {
      if ((i + j) % 2 == 0) {
        mat2[i][j] = mat1[i][j];
      } else {
        mat1[i][j] = 1 ^ mat2[i][j];
      }
    }
  }
  long long arr[100], brr[100];
  pair<long long, long long> coor[100];
  for (long long i = 0; i < n; ++i) {
    arr[i] = mat1[i][0];
    brr[i] = mat2[i][0];
    coor[i].first = i;
    coor[i].second = 0;
  }
  for (long long i = 1; i < n; ++i) {
    arr[n + i - 1] = mat1[n - 1][i];
    brr[n + i - 1] = mat2[n - 1][i];
    coor[n + i - 1].first = n - 1;
    coor[n + i - 1].second = i;
  }
  long long k = 2 * n - 1, a1 = (arr[0] ^ arr[1] ^ arr[2] ^ arr[3]), j = 3;
  if (a1 != 0) {
    for (long long i = 4; i < k; ++i) {
      a1 ^= arr[i];
      a1 ^= arr[i - 4];
      if (a1 == 0) {
        j = i;
        break;
      }
    }
  }
  cout << "? " << coor[j - 3].first + 1 << " " << coor[j - 3].second + 1 << " "
       << coor[j].first + 1 << " " << coor[j].second + 1 << endl
       << flush;
  cin >> x;
  if (x != 0) {
    if (brr[j] == brr[j - 3]) {
      print(mat2);
    } else {
      print(mat1);
    }
  } else {
    if (brr[j] != brr[j - 3]) {
      print(mat2);
    } else {
      print(mat1);
    }
  }
  return 0;
}
