128. Day 1 PF. 河內之塔

0 Judge

Code: 0


河內之塔

題目敘述

元首正在閱讀由斯坦那將軍送來的電報「氣死偶累,妨礙咱都渣渣」,憤怒之下他跑去一旁玩他的河內塔。

元首的河內塔總共有$N$個盤子和A、B、C三根桿子,一開始盤子都在A桿上,盤的尺寸由下到上依次變小,要求必須按下列規則移動圓盤:

  1. 每次只能移動一個圓盤
  2. 大盤不能疊在小盤上面

為了方便起見,盤子的編號由小到大依序為$1 \sim N$

元首絕對會按造規則玩河內塔,但是元首數學不好,每次完河內塔都會搞砸,今天元首又搞砸了「媽了不送,俺媽了不送!」元首憤怒地叫著

身為他的副官你於心不忍,你想知道元首至少經歷了多少次移動才把河內塔弄成現在這樣,好幫助元首度過難關

Input

第一行有一個數字$N(1 \leq N \leq 64)$表示元首河內塔上面盤子的數量,接著有$N$行,第$i$行有一個只由大小寫英文、數字、底線、空白等字元構成的字串,表示編號為$i$的盤子它的名字(元首喜歡幫東西取名字),保證字串長度$\leq 10^4$且名字不重複

接下來有三行,每行的開頭為'A'、'B'、'C'其中一個字符,保證三行的字符不會重複,表示桿子的代號,接著會有一個冒號,冒號之後為該桿子上由上到下盤子的名字,名字以逗號隔開,保證這些名字一定被元首命名過。

保證這三根桿子上不會出現重複名字的盤子且三根桿子上盤子數量加起來$=N$

Output

請輸出元首從初始狀態到現在這個狀態最少經過多少次的移動

範例輸入

4
 a_
 b_
 c_
 d_
C: b_
A: a_, c_
B: d_

範例輸出

14

範例輸入說明

初始狀態:

A: a_, b_, c_, d_
B:
C:

步驟1:

A: b_, c_, d_
B:
C: a_

步驟2:

A: c_, d_
B: b_
C: a_

步驟3:

A: c_, d_
B: a_, b_
C:

步驟4:

A: d_
B: a_, b_
C: c_

步驟5:

A: a_, d_
B: b_
C: c_

步驟6:

A: a_, d_
B:
C: b_, c_

步驟7:

A: d_
B:
C: a_, b_, c_

步驟8:

A:
B: d_
C: a_, b_, c_

步驟9:

A: a_
B: d_
C: b_, c_

步驟10:

A: a_
B: b_, d_
C: c_

步驟11:

A:
B: a_, b_, d_
C: c_

步驟12:

A: c_
B: a_, b_, d_
C:

步驟13:

A: a_, c_
B: b_, d_
C:

步驟14:

A: a_, c_
B: d_
C: b_

元首至少花了14個步驟才把河內塔弄成現在這樣

限制:

時限 100ms
記憶體 128 MB

配分方式:

配分 測資範圍
30% $N \leq 10$
30% $N \leq 20$
40% $N \leq 64$

Judge Setting

run-time limit: 100 ms
memory limit: 12800000 byte
測資數量: 0