#include<bits/stdc++.h>
using namespace std;
#define ff first
#define ss second
#define pb push_back
const int N=3e5+5;
int n;
set<int>sty,stx;
vector<pair<int,int>>Y,X;
int ask(int y, int x){
vector< vector<int> > v(n, vector<int> (n));
v[0][0]=1;
v[y][x]=1;
cout<<"? "<<endl;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cout<<v[i][j];
}
cout<<endl;
}
int h;
cin>>h;
return h;
}
int ask2(int y, int x, int l, int r){
vector< vector<int> > v(n, vector<int> (n));
v[l][r]=1;
v[y][x]=1;
cout<<"? "<<endl;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cout<<v[i][j];
}
cout<<endl;
}
int h;
cin>>h;
return h;
}
void fun(vector<pair<int,int>> vc){
cout<<"! "<<endl;
vector< vector<int> > v(n, vector<int> (n));
for(auto p:vc){
v[p.ff][p.ss]=1;
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cout<<v[i][j];
}
cout<<endl;
}
}
signed main(){
cin>>n;
for(int i=0;i<n;i++){
sty.insert(i);
stx.insert(i);
}
if(ask(0,1)==n){
stx.erase(0);
X.pb({0,0});
}
else if(ask2(0,1,0,2)==n){
sty.erase(0);
Y.pb({0,0});
}
else{
stx.erase(0);
X.pb({0,0});
}
while(sty.size() and stx.size()){
auto y= *sty.begin(), x= *stx.begin();
int h=ask(y,x);
if(h!=2*n-1){
Y.pb({y,x});
sty.erase(y);
}
else{
X.pb({y,x});
stx.erase(x);
}
}
if(sty.empty()){
fun(Y);
}
else{
for(auto a:stx){
for(int i=0;i<n;i++){
if(ask2(X[0].ff,X[0].ss,i,a)%n==0){
X.pb({i,a});
break;
}
}
}
fun(X);
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |