#include<bits/stdc++.h>
using namespace std;
int n;
vector<vector<int>> cur;
void question() {
cout << "?" << endl;
for(int i=0; i<n; i++) {
for(int j=0; j<n; j++) cout << cur[i][j];
cout << endl;
}
}
bool check(int m, int i) {
for(int j=0; j<n; j++) cur[i][j]=0;
for(int j=0; j<=m; j++) cur[i][j]=1;
question();
int a; cin >> a;
return ((m+1)*n == a);
}
int lastTrue(int lo, int hi, int i) {
lo--;
while(lo < hi) {
int mid = lo+(hi-lo+1)/2;
if(check(mid, i)) lo=mid;
else hi=mid-1;
}
return lo;
}
signed main() {
cin >> n;
cur = vector<vector<int>>(n, vector<int>(n, 0));
vector<vector<int>> ans=cur;
for(int i=0; i<n; i++) {
for(int j=0; j<n; j++) cur[i][j]=1;
question();
int a; cin >> a;
if(a == n*n) {
ans=cur; break;
}
cur[i][0]=0;
question();
int b; cin >> b;
if(a/n == b/n) {
ans[i][0]=1;
for(int j=0; j<n; j++) cur[i][j]=0;
continue;
}
int c=lastTrue(0, n-1, i);
ans[i][c+1]=1;
for(int j=0; j<n; j++) cur[i][j]=0;
}
cout << "!" << endl;
for(int i=0; i<n; i++) {
for(int j=0; j<n; j++) cout << ans[i][j];
cout << endl;
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |