#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<random>
using namespace std;
mt19937 a(time(null));
int f[1000050];
string base,s;
int n;
int cnt=0;
int query(vector<int>s1){
cnt++;
if(cnt>3500){
for(int i=1;i>=1;i++);
}
s=base;
for(auto x:s1){
s[x-1]='1';
}
cout<<"? "<<s<<endl;
int x;cin>>x;
return x;
}
vector<int>lg;
int num;
vector<pair<int,int>>nw;
bool vis[1000050];
bool solve(){
// cout<<"new round"<<endl;
bool flag=0;
for(int i=1;i<=n;i++){
vis[i]=0;
}nw.clear();
// cout<<"now:";
for(auto x:lg){
// cout<<x<<"/";
vis[x]=1;
}
// cout<<endl;
for(int i=1;i<=n;i++){
if(vis[i]==0){
nw.push_back(make_pair(a(),i));
}
}
// cout<<"rep:"<<nw.size()<<endl;
sort(nw.begin(),nw.end());
vector<int>qus=lg;
for(auto xxx:nw){
int x=xxx.second;
qus.push_back(x);
int r=query(qus);
if(num+f[x]>r){
//连通
num=r;
flag=1;
lg.push_back(x);
}else{
qus.pop_back();
}
}
return flag;
}
int main(){
cin>>n;
int mx=1;
for(int i=1;i<=n;i++){
base=base+'0';
}
vector<pair<int,int>>ln;
for(int i=1;i<=n;i++){
vector<int>aa;
aa.push_back(i);
f[i]=query(aa);
if(f[i]>f[mx]){
ln.clear();
mx=i;
}
if(f[i]==f[mx]){
ln.push_back(make_pair(a(),i));
}
}
sort(ln.begin(),ln.end());
mx=ln[0].second;
// cout<<mx<<"?";
lg.push_back(mx);
num=f[mx];
while(solve());
if(lg.size()==n)cout<<"! 1"<<endl;
else cout<<"! 0"<<endl;
}