#include using namespace std; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int N; cin >> N; vector A(N); for(int i = 0; i < N; i++){ cin >> A[i]; } // ∑A_i ≤10000 なので、初期Kは10001で十分 int K = 10001; // 山の XOR を返す auto calcXor = [&](){ int s = 0; for(int v : A) s ^= v; return s; }; // 初期 XOR で先手か後手かを決定 int S = calcXor(); bool isFirst = (S != 0); cout << (isFirst ? "First\n" : "Second\n") << flush; // 直前のジャッジ(相手)の手を覚えておく int last_i = -1, last_x = -1; // ourTurn は最初だけ使う(以降は常に judge→us のサイクル) bool ourTurn = isFirst; while(true){ int ret, i, x; // 相手の手を読む if(!ourTurn){ cin >> i >> x; cin >> ret; if(ret == -1) return 0; // 負け確定 --i; A[i] -= x; K = x; last_i = i; last_x = x; } // 自分の手番 S = calcXor(); int move_i = -1, move_x = 1; // 1) 先手か、XOR≠0 のとき:XORを0に戻す手があれば取る if(S != 0){ for(int j = 0; j < N; j++){ int a = A[j]; int t = a ^ S; if(t < a){ int r = a - t; if(r <= K){ move_i = j; move_x = r; break; } } } } // 2) 調整手が取れない(または Xor=0 のとき):ミラー戦略 if(move_i == -1 && last_i != -1 && last_x <= K && A[last_i] >= last_x){ // 相手が直前に(i_last, x_last)を取ったら、同じ山から同じ x_last を取る move_i = last_i; move_x = last_x; } // 3) ミラーもできないなら、とりあえず 1 石だけ if(move_i == -1){ for(int j = 0; j < N; j++){ if(A[j] > 0){ move_i = j; move_x = 1; break; } } } // 手を出力 A[move_i] -= move_x; cout << (move_i + 1) << " " << move_x << "\n" << flush; // 結果を読む cin >> ret; if(ret != 0) return 0; // ret=1 で勝利, ret=-1 で敗北 K = move_x; ourTurn = false; } return 0; }