#include <iostream>
#include <vector>
using namespace std;
int n, a[105], col[105][105], ans[105], seen[100000];
int print(){
cout<<"?\n";
for (int i=1;i<=n;i++){
for (int j=1;j<=n;j++)
cout<<col[i][j], col[i][j] = 0;
if (i < n)
cout<<'\n';
else
cout<<endl;
}
cin>>col[0][0];
return col[0][0];
}
int get(pair<int,int> A, pair<int,int> B){
col[A.first][A.second] = 1;
col[B.first][B.second] = 1;
return print();
}
int get(int rw, int l, int r){
for (int i=l;i<=r;i++)
col[rw][i] = 1;
return print();
}
int main(){
cin>>n;
for (int i=2;i<=n;i++){
ans[i] = get({1, 1}, {i, 1});
seen[ans[i]] = 1;
if (ans[i] % n != 0)
a[i] = 1;
}
if (seen[n] or (seen[2 * n] == 0 and get({2, 1}, {3, 1}) == 2 * n)){
for (int i=1;i<=n;i++)
a[i] ^= 1;
}
vector<pair<int, int>> vec;
for (int i=1;i<=n;i++){
if (a[i] == 0){
vec.push_back({i, 1});
continue;
}
int l = 1, r = n + 1;
while (l + 1 < r){
int mid = (l + r) / 2;
if (get(i, 1, mid) == mid * n)
l = mid;
else
r = mid;
}
if (l == n){
vec.clear();
for (int j=1;j<=n;j++)
vec.push_back({i, j});
break;
}
vec.push_back({i, l + 1});
}
for (auto [i, j] : vec)
col[i][j] = 1;
cout<<"!\n";
for (int i=1;i<=n;i++){
for (int j=1;j<=n;j++)
cout<<col[i][j];
if (i < n)
cout<<'\n';
else
cout<<endl;
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |