Q254: Towers of Hanoi

在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