FHVirus 一直沈迷於魔術方塊。要知道,認真的投入魔術方塊除了要能夠順暢的解出各種魔術方塊外,還要能解得快。對此,他不但接觸了各種不同種類的魔術方塊,還參加了各種大大小小的魔術方塊比賽。
這樣喜愛魔術方塊的 FHVirus 在最近接觸到了程式設計,同時也很喜歡程式設計的他決定結合他在魔術方塊的興趣,自己寫出一個「魔術方塊打亂器」來幫助他練習。
什麼是魔術方塊打亂器呢?魔術方塊玩家為了要練習,他們必須時常重複將魔術方塊打亂再嘗試快速復原的動作,但如果一直隨意的打亂的話,人類無可避免的習慣會讓他們總是接觸到類似的打亂方法。因此,撰寫一個公平的「打亂器」就顯得非常重要了。
因此,所謂的「魔術方塊打亂器」,就是會負責隨機產生一串「打亂公式」,再由玩家照著這個公式打亂。玩家在打亂後,再照著自己習慣的方式練習快速復原。
不過,FHVirus 才剛開始學程式而已,因此他決定先從最簡單的「二階魔術方塊打亂器」開始寫起。
首先我們要認識什麼是「二階魔術方塊」,如下圖:
上圖中,左方就是一個二階魔術方塊的樣子,他有著六個面,每個面分別由四格方格組成,常由黃、橘、藍、紅、綠、白六種顏色組成。而右方則是他的展開圖,可以實際看見六個面的顏色,其中黃、橘、藍、紅、綠、白分別以 Y
、O
、B
、R
、G
、W
簡寫之。
接著,我們會介紹三個在二階魔術方塊上的基本操作。
1 . F
操作
F
操作會順時針地轉動魔術方塊前方的面,如下圖:
上圖中,左側顯示了旋轉的面及方向,右側則是轉動後展開圖會變成的樣子。
為了簡化步數,我們會以 F2
則表示「180 度地旋轉魔術方塊前方的面」,同時也可以想成執行 F
操作兩次;F'
來表示「逆時針地轉動魔術方塊前方的面」,同時也可以想成執行 F
操作三次。
2 . R
操作
R
操作會順時針地轉動魔術方塊右方的面,如下圖:
上圖中,左側顯示了旋轉的面及方向,右側則是轉動後展開圖會變成的樣子。
為了簡化步數,我們會以 R2
則表示「180 度地旋轉魔術方塊右方的面」,同時也可以想成執行 R
操作兩次;R'
來表示「逆時針地轉動魔術方塊右方的面」,同時也可以想成執行 R
操作三次。
3 . U
操作
U
操作會順時針地轉動魔術方塊上方的面,如下圖:
上圖中,左側顯示了旋轉的面及方向,右側則是轉動後展開圖會變成的樣子。
為了簡化步數,我們會以 U2
則表示「180 度地旋轉魔術方塊上方的面」,同時也可以想成執行 U
操作兩次;U'
來表示「逆時針地轉動魔術方塊上方的面」,同時也可以想成執行 U
操作三次。
有了以上這些基本操作後,是時候開始來寫二階魔術方塊打亂器了。首先,我們必須先寫出一份「打亂公式產生器」,是負責產生一連串的基本操作用的。接著,我們還得寫出一份「轉動模擬器」,負責模擬出二階魔術方塊照著打亂公式打亂後的樣子,來讓玩家可以在自行照著公式打亂後,確認自己是否有打亂錯誤。
產生器的部份 FHVirus 已經先寫好了,不過模擬器的部份他卻遇到了障礙。你可以幫他撰寫一個模擬器,在讀入打亂公式後,輸出二階魔術方塊照著打亂公式打亂後的樣子嗎?
(備註:此題網站上的輸出因顯示問題無法顯示行頭空白,請參考題本或 Output Format 欄位)
輸入首行有一個正整數 $N$,代表該次產生器產生出來的打亂公式長度。
接下來一行 $N$ 個字串,每個字串會是九種基本操作,F
、F'
、F2
、R
、R'
、R2
、U
、U'
、U2
之一。
輸出照著打亂公式打亂後魔術方塊的展開圖,最初的狀態如題敘中第一張圖右方的展開圖所示。
對於展開圖,評測端會進行嚴格比對,意即你必須依照以下範例格式輸出:
YY
YY
GGOOBBRR
GGOOBBRR
WW
WW
其中第一、二、五、六行最前方都有兩個空格字元(ASCII 編號 32),且每一行最後都有一個換行字元(ASCII 編號 10)。注意到第一、二、五、六行的後方都沒有多餘的空格字元,也就是他們的長度比四、五行都要少四。
No. | Testdata Range | Constraints | Score |
---|---|---|---|
1 | 0~1 | 範例測資 | 0 |
2 | 0~8 | 無額外限制 | 100 |