#include using namespace std; #define ALL(c) (c).begin(),(c).end() #define PB push_back #define IN(x,c) (find(c.begin(),c.end(),x) != (c).end()) #define REP(i,n) for (int i=0;i<(int)(n);i++) #define FOR(i,a,b) for (int i=(a);i<=(b);i++) #define INIT(a,v) memset(a,v,sizeof(a)) template A cvt(B x) { stringstream ss; ss<>y; return y; } #define SPC << " " << #define DEBUG(x) cerr << #x << " = "; cerr << x << endl; #define DEBUG_ITER(x) cerr << #x << " = "; for (auto _ : x) cerr << _ << ' '; cerr << endl; typedef long long int64; typedef pair PII; typedef vector VI; typedef array III; typedef vector VS; int n,p; int deg[100000], query[17][100000], ans[17][100000]; int main() { //freopen("test.in","r",stdin); cin >> n; while ((1< leaves; cout << "QUERY " << string(n,'1') << endl; REP (x,n) { cin >> deg[x]; if (deg[x]==1) leaves.push(x); } // prepare queries (01010101, 00110011, 00001111, ...) REP (x,n) { REP (j,p) query[j][x]=(bool)(x&(1<> ans[j][x]; } // repeatedly cut off leaves vector edges; while (!leaves.empty()) { // process and remove leaves int x=leaves.front(); leaves.pop(); if (deg[x]!=1) continue; int y=0; // find neighbour (unique answer pattern) REP (j,p) y+=(1<