#include <bits/stdc++.h>
#define int long long
#define pb push_back
#define pii pair<int, int>
#define ff first
#define ss second
#define tii tuple<int, int, int>
// #define endl '\n'
using namespace std;
#define rsz resize
#define sz size
#define ass assign
#define all(x) (x).begin(),(x).end()
int n;
vector<pii> hor, ver;
vector<vector<int>> mat;
vector<vector<int>> sent;
// int find(int x, int y){
// }
int ask(){
cout << "?"<<endl;
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
cout << mat[i][j];
}
cout << endl;
}
int r; cin >> r;
return r;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cin >> n;
mat.rsz(n, vector<int>(n));
sent.rsz(n, vector<int>(n));
int x=0, y=0;
mat[0][0]=1;
mat[0][1]=1;
int r=ask();
if(r==n){
sent[0][0]=1;
sent[0][1]=1;
}else if(r==2*n){
sent[0][0]=-1;
sent[0][1]=-1;
}else{
mat[0][1]=0;
mat[0][2]=1;
int r2=ask();
if(r2==n){
sent[0][0]=1;
sent[0][2]=1;
sent[0][1]=-1;
}else if(r2==2*n){
sent[0][0]=-1;
sent[0][2]=-1;
sent[0][1]=1;
}else{
mat[0][0]=0;
mat[0][1]=1;
int r3=ask();
if(r3==n){
sent[0][1]=1;
sent[0][2]=1;
sent[0][0]=-1;
}else if(r3==2*n){
sent[0][1]=-1;
sent[0][0]=1;
sent[0][2]=-1;
}
}
}
mat[0][0]=0;
mat[0][1]=0;
mat[0][2]=0;
if(sent[0][0]==1){
ver.pb({0, 0});
}else{
hor.pb({0, 0});
}
// cout << sent[0][0]<<endl;
// if(sent[0][1]==1){
// ver.pb({0, 1});
// }else if(sent[0][1]==-1){
// hor.pb({0, 1});
// }
// if(sent[0][2]==1){
// ver.pb({0, 2});
// }else if(sent[0][2]==-1){
// hor.pb({0, 2});
// }
while(!(x==n-1&&y==n-1)&&ver.sz()<n&&hor.sz()<n){
if(sent[x][y]==1){
if(sent[x+1][y]==0){
mat[x][y]=1;
mat[x+1][y]=1;
int r = ask();
mat[x][y]=0;
mat[x+1][y]=0;
if(r==2*n){
sent[x+1][y]=1;
ver.pb({x+1, y});
}else{
sent[x+1][y]=-1;
hor.pb({x+1, y});
}
}else{
if(sent[x+1][y]==1){
ver.pb({x+1, y});
}else{
hor.pb({x+1, y});
}
}
x++;
}else{
if(sent[x][y+1]==0){
mat[x][y]=1;
mat[x][y+1]=1;
int r = ask();
mat[x][y]=0;
mat[x][y+1]=0;
if(r==2*n){
sent[x][y+1]=-1;
hor.pb({x, y+1});
}else{
sent[x][y+1]=1;
ver.pb({x, y+1});
}
}else{
if(sent[x][y+1]==1){
ver.pb({x, y+1});
}else{
hor.pb({x, y+1});
}
}
y++;
}
}
cout << "!"<<endl;
if(ver.sz()==n){
for(auto [a, b]:ver){
mat[a][b]=1;
}
}else{
for(auto [a, b]:hor){
mat[a][b]=1;
}
}
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
cout << mat[i][j];
}
cout << endl;
}
}