#include using namespace std; using ll = long long; // #define endl '\n' int bit_length(int x){ int c = 1; int i = 0; while(c <= x){ i++; c *= 2; } return i; } void solve(){ int n; cin >> n; vector A(n); int x = 0; vector> se(20, set()); for(int i = 0; i < n; i++){ cin >> A[i]; x ^= A[i]; for(int j = 0; j < 20; j++){ if((A[i] >> j) & 1) se[j].insert(i); } } bool turn; if(x == 0){ cout << 0 << endl; turn = false; } else{ cout << 1 << endl; turn = true; } int ret; while(1){ if(turn){ assert(x != 0); int b = bit_length(x) - 1; auto it = se[b].begin(); int i = (*it); int a = A[i]; for(int j = 0; j < 20; j++){ if((a >> j) & 1) se[j].erase(i); } int d = a - (a ^ x); cout << i + 1 << " " << d << endl; cin >> ret; if(ret == -1) return; a -= d; A[i] = a; x = 0; for(int j = 0; j < 20; j++){ if((a >> j) & 1) se[j].insert(i); } } else{ assert(x == 0); int i, k; cin >> i >> k; i--; cin >> ret; if(ret == -1) return; int a = A[i]; for(int j = 0; j < 20; j++){ if((a >> j) & 1) se[j].erase(i); } x ^= a; a -= k; x ^= a; A[i] = a; for(int j = 0; j < 20; j++){ if((a >> j) & 1) se[j].insert(i); } } turn = turn ^ true; } } int main(){ solve(); }