#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for (int i = a; i <= b; i++)
#define per(i,a,b) for (int i = a; i >= b; i--)
#define pb push_back
#define all(v) (v).begin(), (v).end()
const int MAXN = 110;
int ok[MAXN][MAXN],n;
int h[MAXN];
void print(int i, int mid, char sp) {
cout << sp << " " << endl;
rep(j,1,mid) ok[i][j] = 1;
rep(i,1,n) rep(j,1,n) {
cout << (ok[i][j]);
if(j==n) cout << endl;
}
rep(j,1,mid) ok[i][j] = 0;
}
int ask(int i, int mid) {
print(i,mid, '?');
int ans;cin >> ans;
return ans;
}
// 0 -> H
// 1 -> V
int main() {
ios_base::sync_with_stdio(0);cin.tie(nullptr);
cin >> n;
rep(i,1,n) {
if(ask(i,n) == n*n) {
print(i,0,'!');
return 0;
}
}
rep(i,1,n) {
int lo = 2, hi = n, ans=n;
while(lo<=hi) {
int mid = (lo+hi)>>1;
int y = ask(i,mid);
if(y>n && y<n*mid) {
ans = mid;
hi = mid-1;
} else {
lo = mid+1;
}
}
int y = ans%n+1;
ok[i][ans] = 1;
ok[i][y] = 1;
int v = ask(i,0);
if(v == n) {
h[i] = ans;
}
if(v == 2*n) {
h[i] = ans-1;
}
ok[i][ans] = 0;
ok[i][ans-1] = 1;
v = ask(i,0);
if(v == n) {
h[i] = ans-1;
}
if(v == 2*n) {
h[i] = ans;
}
ok[i][ans-1] = 0;
ok[i][y] = 0;
}
rep(i,1,n) {
ok[i][h[i]] = 1;
}
print(0,0,'!');
return 0;
}