呢題係一道多階段(multi-pass)交互題。記得喺每次輸出之後刷新輸出緩衝區。你可以使用以下方式刷新輸出:
- 喺 C/C++ 入面使用
fflush(stdout)或者cout.flush(); - 喺 Java 同 Kotlin 入面使用
System.out.flush(); - 喺 Python 入面使用
sys.stdout.flush()。

由 ChatGPT 繪製嘅遊戲概念圖。
喺經典嘅在線匹配(online matching)遊戲入面,一張圖嘅邊會逐條顯示出嚟。每當顯示一條邊嗰陣,你必須即刻而且不可撤回咁決定係咪將佢加入你嘅匹配入面。你嘅目標係確保任意兩條被選中嘅邊都唔會共享同一個頂點,同時最大化所選邊嘅總數。
你係一位渴望成名、雄心勃勃嘅電腦科學家。正如你所深知,喺在線環境下搵出最大匹配喺高概率意義下係被證明咗唔可能嘅——就算係二分圖呢類最簡單嘅圖類都係一樣。然而,喺其他人睇到根本障礙嘅地方,你睇到咗通往榮耀嘅機會。今日,你宣稱已經攻克咗樹上嘅長期公開難題,並準備好向全世界公佈你突破性嘅演算法。
但係有一個問題:尋日你喺自己嘅證明入面發現咗一個漏洞,而且到而家都仲未知點樣修補。唔甘心放棄聚光燈嘅你,決定將呢場演示變成一場魔術表演——你隱藏喺後台嘅助手,會喺遊戲開始之前傳送少少關於成棵有 $n$ 個頂點嘅樹嘅提示畀你。
你原本嘅計劃好簡單:叫助手直接將每條邊查詢嘅答案傳送過嚟。為此,你安裝咗一個秘密耳機,能夠接收一條長度恰好為 $(n - 1)$ 嘅二進制字串。但係現場觀眾對你嘅「突破」抱持懷疑態度。為咗防止任何預先安排好嘅造假,佢哋要求所有邊必須以均勻隨機嘅順序呈現——呢個順序無論係你定係你嘅助手都無法預測或控制。
舞台已經搭好,聚光燈正照住你。而家,喺唔改變通訊頻道嘅情況下,證明你嘅宣稱啦。
交互協議
你嘅程序喺每個測試點上面會被執行兩次。喺 prepare 階段,你嘅程序將扮演助手。喺 play 階段,你嘅程序將扮演你(魔術師)。喺呢兩個階段入面,你嘅程序都會作為交互程序進行評測。
準備階段(Prepare Round)
輸入嘅第一行包含單詞 prepare。第二行包含一個整數 $n$($2 \le n \le 500$)——表示頂點嘅數量。接住落嚟嘅 $(n - 1)$ 行,每行包含兩個整數 $u$ 同 $v$($1 \le u, v \le n$,$u < v$),表示樹入面連接 $u$ 同 $v$ 嘅一條無向邊。
你必須輸出一行,包含一個長度恰好為 $(n - 1)$、只由字符 0 同 1 組成嘅二進制字串 $s$。呢個就係傳送去第二個階段(play 階段)嘅字串。如果你嘅輸出唔符合要求嘅格式,你將會獲得 Wrong Answer 結果。
表演階段(Play Round)
你嘅程序將會為 play 階段重新啟動。
第一行包含單詞 play。第二行包含整數 $n$。第三行包含二進制字串 $s$,同你喺 prepare 階段輸出嘅完全一致。
之後,遊戲開始,共有 $(n - 1)$ 個回合。喺每個回合入面,輸入會提供一行,包含兩個整數 $u$ 同 $v$($1 \le u, v \le n$,$u < v$)。作為回應,你應該輸出一行,包含 take 或者 ignore。第一階段入面嘅所有邊都會恰好出現一次,而且邊嘅出現順序係由 $(n - 1)!$ 種可能嘅排列入面均勻隨機揀出嚟嘅。
一旦出現格式無效嘅輸出,遊戲會即刻結束,交互器唔會再提供任何後續資訊。
正確性評測
設 $M$ 為你嘅程序所揀嘅邊嘅集合。如果冇任何頂點與超過一條被選中嘅邊相連,而且 $|M| = |M^*|$(其中 $M^*$ 係該圖嘅最大匹配),則視為可接受。
除咗範例測試之外,恰好有 $50$ 個測試點。為咗通過本題,你嘅程序必須喺包括範例測試在內嘅所有測試點上表現正確。
保證所有隨機打亂順序喺收到程序輸出之前就已經固定。每個測試點嘅隨機性都係固定嘅,透過固定偽隨機數生成器嘅種子嚟實現。
題目提供咗測試工具,以協助你開發同測試你嘅程序。
範例
範例 1,階段 1
輸入
prepare 3 1 2 1 3
輸出
00
範例 1,階段 2
輸入
play 3 00 1 3 1 2
輸出
take ignore
範例 1 說明
由於 $|M^*| = 1$,揀任意一條邊都係可接受嘅,因此提示字串可以係任意嘅。