HAN01 - Ha-noi!

Little Sabrina loves solving puzzles. Last week she got a new puzzle: The "Tower of Hanoi" puzzle. This puzzle is based on an old legend: "The temple priests of Hanoi have to transfer a tower consisting of 64 fragile disks of gold from one part of the temple to another, one disk at a time. The disks are arranged in order, no two of them the same size, with the largest on the bottom and the smallest on top. Because of their fragility, a larger disk may never be placed on a smaller one, and there is only one intermediate location where disks can be temporarily placed. It is said that before the priests complete their task the temple will crumble into dust and the world will vanish in a clap of thunder." Sabrina reconstructed the problem with some coins of different size. She solved the puzzle for three coins in 7 steps, for four coins in 15 steps,... after solving the problem with 7 coins she had the hang of it. Yesterday she started to solve the puzzle with 31 coins and her optimal strategy. After hours of moving coins from one pile to the other she was very tired and went to bed. This was a bad idea! Her little brother Robin discovered the towers of coins and - whoops! - threw it on the floor. Then he noticed a sheet of paper: "Don't touch this towers! Steps: 16543". "Oh no!" Robin has to reconstruct the tower because his sister can get very, very angry... Your task is to help Robin to reconstruct the towers. Sabrina started the game with all disks on peg number one and her goal was to move the disks to peg number two. She used her optimal strategy and noted the number of steps she had done.

Input

The first line of input contains one integer t: The number of testcases. t lines follow. Each line contains two integers n (2< n< 61) and k (0< k< 2n). n is the number of disks of the Hanoi puzzle and k the number of steps Sabrina had done. Please be careful, the number k can be very large, it may not fit in a 32 bit integer.

Output

Output the reconstructed configuration of the towers after k steps. For each testcase output three lines. One for each tower. Each line consists of the tower identifier (1,2,3) a colon, one space and the disk numbers (n,n-1,...,2,1) which are separated by a '|'-character.

Example

Input:
3
3 6
32 889397450
31 16543

Output:
1: 1
2: 3|2
3:
1: 32|31|28|25|18|17|14|3
2: 30|29|26|13|12|11|10|9|6|5|2
3: 27|24|23|22|21|20|19|16|15|8|7|4|1
1: 31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|7|6
2: 15|8|5|4|3|2|1
3: 14|13|12|11|10|9

Added by:Simon
Date:2005-05-03
Time limit:2s
Source limit:8082B
Memory limit:1536MB
Cluster: Cube (Intel G860)
Languages:C CSHARP C++ 4.3.2 CPP C99 CLOJURE LISP sbcl LISP clisp D FSHARP FORTRAN GO HASK JAVA LUA OCAML PERL PHP PRLG-swi PYTHON PYTHON3 PY_NBC RUBY SCALA
Resource:Ulm Algorithm Course SoSe 2005

hide comments
2013-10-28 11:16:54 Gunnar Völkel
Wie ich schon per E-Mail einigen empfohlen habe, solltet ihr euch ein paar größere Testcases (n=60 und großes k) erstellen und die auch noch testen.
2013-10-24 03:33:12 Stefan Mayer
Habe es nun auch hinbekommen!!
Das Problem war bei mir, dass ich ein long double verwendet habe, leider ist dieser bei sehr großen zahlen ungenau. Verwende nun keine Gleitkommazahlen mehr und es hat alles funktionier.
2013-10-24 01:26:06 Tim Weidner
alle Testcases hier bestanden, ebenfalls -> wrong answer

EDIT: long statt float, dann gings. (Python 2.7)
Zuvor hatte ich die selbe Ausgabe wie Stefan Mayer,
danach war die 1. Scheibe im 1. Testcase auf dem 1. Stapel

Last edit: 2013-10-24 01:53:15
2013-10-24 00:11:54 Christopher Katzinski


Last edit: 2013-10-24 00:22:36
2013-10-23 20:49:11 Fabian Meyer
Hallo, hab das gleiche Problem. Wenn ich es auf meinem Rechner laufen lasse funktioniert es. Die Ein- und Ausgabe ist wie in der Aufgabenstellung gefordert (Eingabe: Anzahl der Testcases und dann jeweil eine neue Line in der man n und k getrennt durch ein Leerzeichen eingibt. Ausgabe: Nummer der Stange, Doppelpunkt, Leerzeichen und dann die Elemente). Außerdem transportiert es den Turm von 1 nach 2. Ich bin wirklich ratlos, hat noch jemand eine Idee, auf was man sonst achten muss?
2013-10-23 13:01:09 Tobias Heß


Last edit: 2013-10-23 13:03:00
2013-10-23 12:43:15 Tobias Heß
@Stefan Mayer, der Erste von den Testcases, verstößt gegen die Regel 0<k<2^n endet aber trotzdem nicht in einem komplett versetzten Stapel
2013-10-23 12:30:31 Tobias Heß
Also ich verwende long long und der Testcase von Mario Schmautz funktioniert bei mir auch, noch jmd ne Idee ? Und warum kann man sich seine "wrong answer" nicht anschauen ?

Last edit: 2013-10-23 12:32:37
2013-10-23 11:13:04 Stefan Mayer
Ich bekomme hier auch nur "wrong answer" und weiß nicht warum, obwohl das ergebniss stimmt. Das ganze habe ich mit ideone.com getestet, die verwenden ja auch die Sphere Engine.

Input:
6
40 12389123891123801
3 6
32 889397450
31 16543
30 1073741823
61 889397450
Output
1: 40|39|36|31|28|27|26|25|18|17|16|15|12|9|8|5|4
2: 37|30|29|24|21|20|13|6|3|2|1
3: 38|35|34|33|32|23|22|19|14|11|10|7
1: 1
2: 3|2
3:
1: 32|31|28|25|18|17|14|3
2: 30|29|26|13|12|11|10|9|6|5|2
3: 27|24|23|22|21|20|19|16|15|8|7|4|1
1: 31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|7|6
2: 15|8|5|4|3|2|1
3: 14|13|12|11|10|9
1:
2: 30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1
3:
1: 61|60|59|58|57|56|55|54|53|52|51|50|49|48|47|46|45|44|43|42|41|40|39|38|37|36|35|34|33|32|31|28|25|18|17|14|3
2: 27|24|23|22|21|20|19|16|15|8|7|4|1
3: 30|29|26|13|12|11|10|9|6|5|2

Vielleicht erkennt hier jemand ein Fehler

2013-10-23 07:33:54 Mario Schmautz
@Tobias Heß.
Folgende Dinge kommen mir in den Sinn, die schief gelaufen sein könnten und die durch die angegebenen Testcases nicht überprüft werden:

Auf dem verwendeten System gilt sizeof(int)=4 sizeof(long)=4 und sizeof(long long)=8.
=> long long oder unsigned long long verwenden

Wenn du deine Potenzen mit Bit-Schiebe-Operationen berechnest, achte darauf, dass auch die Literale vom passenden Typ sind. Also z.B. 1ull statt 1.

Wenn der folgenede Testcase bei dir funktioniert, dann liegt es vermutlich nicht an den von mir genannten Punkten.
1
61 889397450
1: 61|60|59|58|57|56|55|54|53|52|51|50|49|48|47|46|45|44|43|42|41|40|39|38|37|36|35|34|33|32|31|28|25|18|17|14|3
2: 27|24|23|22|21|20|19|16|15|8|7|4|1
3: 30|29|26|13|12|11|10|9|6|5|2

© Spoj.com. All Rights Reserved. Spoj uses Sphere Engine™ © by Sphere Research Labs.