QOJ.ac

QOJ

Time Limit: 6 s Memory Limit: 2048 MB Total points: 100

#8862. 樹上困局

Statistics

Anatoly Cheng McDougal 喺好多方面都係個典型學生。只要做得到,佢就會複製貼上程式碼,而唔會由頭寫。呢種做法難免會出問題。例如,佢啱啱學樹嘅前序、中序同後序遍歷,攞到樹嘅前序輸出程式碼(見下面左邊)嗰陣,只係複製貼上,將輸出敘述搬去正確位置,再幫程序改名。不過,佢唔記得改程式碼入面呼叫嘅程序名,結果就變成下面有錯嘅中序同後序輸出程式碼。

void prePrint(TNode t)
{
  output(t.value);
  if (t.left != null)
    prePrint(t.left);
  if (t.right != null)
    prePrint(t.right);
}
void inPrint(TNode t)
{
  if (t.left != null)
    prePrint(t.left);
  output(t.value);
  if (t.right != null)
    prePrint(t.right);
}
void postPrint(TNode t)
{
  if (t.left != null)
    prePrint(t.left);
  if (t.right != null)
    prePrint(t.right);
  output(t.value);
}

去到呢一步,Anatoly 做咗件唔似典型學生嘅事:佢竟然測試自己嘅程式碼!可惜,結果唔啱嗰陣,佢又變返典型學生咁。佢一慌,就開始隨機改三個程序入面嘅呼叫,希望撞啱。唔使講,情況變得比最初仲差。

Anatoly 嘅教授用一棵隨機嘅字元樹測試程式碼。佢睇到三個輸出程序嘅結果,就估中咗發生咩事。不過,佢冇直接睇程式碼,而係決定試下單靠觀察輸出去重建 Anatoly 嘅程式碼。為咗咁做,佢作出咗以下正確假設:

  1. 每個輸出程序入面嘅輸出敘述都喺正確位置(例如 inPrint 程序入面,係喺兩次遞迴呼叫之間)。

  2. 三個程序總共有六次遞迴呼叫,當中啱啱兩次呼叫 prePrint、啱啱兩次呼叫 inPrint,同啱啱兩次呼叫 postPrint,但佢哋可能放錯咗喺其他程序入面。

教授好快發現,由輸出去重建 Anatoly 嘅程式碼同測試樹唔係簡單嘅事,而且結果可能唔唯一。你要幫佢搵出 Anatoly 程式碼所有可能嘅重建方式。另外,每種重建方式都要搵出能夠產生觀察到嘅輸出、按字母順序排第一嘅樹(定義見輸出格式)。

輸入格式

輸入得一組測試資料,由分別放喺三行嘅三個字串組成:Anatoly 嘅 prePrint、inPrint 同 postPrint 程序(依呢個次序)喺某棵測試樹上觀察到嘅輸出。每個字串有 $n$ 個大寫字母($4 \le n \le 26$),而且每個字串入面都冇重複字母。保證至少有一個解。

輸出格式

輸出呢組測試資料所有可能嘅重建方式,順序跟下面最後一段所講。每種重建方式嘅輸出分兩部分。第一部分得一行,描述 Anatoly 程序入面嘅六次呼叫:先係 prePrint 程序入面嘅兩次(遞迴)呼叫,再係 inPrint 程序入面嘅呼叫,最後係 postPrint 程序入面嘅呼叫。用 Pre、In 同 Post 呢啲字表示呼叫,中間用空格分開。例如,如果 Anatoly 嘅程序係啱嘅,重建方式第一部分嘅輸出就會係 Pre Pre In In Post Post。

第二部分有三行,描述能夠產生觀察到嘅輸出嘅第一棵測試樹。第一行係棵樹正確嘅前序輸出,第二同第三行分別係正確嘅中序同後序輸出。第一棵樹係指前序輸出按字母順序排第一嘅樹。如果有多棵咁嘅樹,就揀當中中序輸出按字母順序排第一嗰棵。

每種重建方式都係由 Pre、In 同 Post 揀出 6 個詞元組成嘅序列。重建方式按字典序排列,詞元順序係 $\texttt{Pre} < \texttt{In} < \texttt{Post}$。

樣例

輸入格式 1

HFBIGEDCJA
BIGEDCJFAH
BIGEDCJFAH

輸出格式 1

Pre Post In Post In Pre
HFBJCDEGIA
BIGEDCJFAH
IGEDCJBAFH

輸入格式 2

BNLFAGHPEDOCMJIK
NLBGAPHCODEIJMKF
NLFAGHPEDOCMJIKB

輸出格式 2

In Pre In Post Post Pre
BLNFKMEHAGPCODIJ
NLBAGHPEODCMIJKF
NLGAPHDOCEJIMKFB

Post Pre In In Post Pre
BLNFKICPGAHEODMJ
NLBGAPHCODEIJMKF
NLAGHPDOECJMIKFB

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.