在1883年,Edouard Lucas發明了一種很流行的遊戲─漢諾塔(the Tower of Hanoi)。直到今天很多電腦科學的教科書仍用他來展示如何寫一個遞迴(recursion)的程式。現在就讓我們來說明一下其規則:
要瞭解漢諾塔如何運作最好的方法就是寫一個程式去模擬,在螢幕上展示盤子搬移的過程。然而現在並沒有要求你這樣做,你的任務是給你盤子的數目n,以及總共搬移的次數m,依照下述的演算法,請你有效率的算出搬移後A、B、C各柱子上盤子的數目。
演算法:
大家都知道,並且也相當容易證明:要搬移n個盤子從一根柱子到另一根柱子需要的次數為2n-1。有一個簡單的演算法讓我們可以達成這件事:對奇數次的搬移,搬動最小的盤子(編號1號)從一根柱子到下一根柱子(按ABCABC的順序)。對偶數次的搬移,最唯一可行的搬動(不能動到1號的盤子)。
Input
每組測試資料一列,含有2個整數n,m。n(1 <= n <= 100)代表盤子的數目。m(0 <= m <= 2n-1)代表要搬移的次數。n=0 m=0代表輸入結束。
Output
對每一組測試資料,輸出搬移後A、B、C各柱子上盤子的數目。
Sample Input
3 1 4 1 3 7 4 15 3 5 64 2 8 45 100 12345678901234567890 100 1267650600228229401496703205373 0 0
Sample Output
2 1 0 3 1 0 0 3 0 0 0 4 1 1 1 62 1 1 4 2 2 60 18 22 1 1 98