func_code_string: #include <bits/stdc++.h>   #define rep(i,a,b) for(int i = (a); i < (b); ++i)   #define rrep(i,a,b) for(int i = (b); i --> (a);)   #define sz(v) int(v.size())   using namespace std;      string inf, zero;      string add(string x, string y, int init){    string res(sz(x),  ? );    int todo = init;    rrep(i,0,sz(x)){     todo += x[i] + y[i] - 2 *  0 ;     res[i] = todo % 2 +  0 ;     todo /= 2;    }    if(todo) return inf;    return res;   }      int main(){    int n, b;    cin >> n >> b;    inf = string(b,  1 );    zero = string(b,  0 );       vector<string> fibs = {zero, zero}; // fibonacci numbers minus one    while(fibs.back() < inf)     fibs.push_back(add(fibs.back(), fibs[sz(fibs)-2], 1));    int todo = sz(fibs)-1;    deque<pair<int, bool>> ls;    rep(i,0,n) ls.push_back({i+1, true});    string lb = zero; // current lower bound    while(!ls.empty()){     string ans;     if(add(lb, fibs[todo], 0) == inf) ans =  no ;     else { cout << ls.back().first <<     << add(lb, fibs[max(0, todo)], 0) << endl;            cin >> ans; }      if(ans ==  yes ){      lb = add(lb, fibs[todo], 1);      while(!ls.empty() && ls[0].second){       ls.pop_front();       todo += 2;      }      if(ls.empty()) break;      ls[0].second = true;     } else {      ls.push_front({ls.back().first, false});      ls.pop_back();     }     if(--todo <= 0){      todo += ls[0].second ? 2 : 1;      ls.pop_front();     }    }    cout << 0 <<     << lb << endl;   }   