#include <stdio.h>
#define DISKS 4 // 10 max
int stacks[3][DISKS];
int sps[3];
void init(int from)
{
int i;
sps[2] = sps[1] = sps[0] = 0;
for (i = 0; i < DISKS; i++)
stacks[from][i] = DISKS - i; // disk radius
sps[from] = DISKS;
}
void print(void)
{
int i, j, k;
for (i = DISKS - 1; i >= 0; i--)
{
for (j = 0; j < 3; j++)
{
if (sps[j] > i)
{
for (k = 0; k < 10 - stacks[j][i]; k++)
for (k = 0; k < 2 * stacks[j][i]; k++)
for (k = 0; k < 10 - stacks[j][i]; k++)
}
else
{
}
}
}
printf("_________/\\_________ _________/\\_________ _________/\\_________\n\n"); }
void solve(int to, int from, int cnt)
{
int other = from ^ to ^ 3;
if (!cnt) return;
solve(other, from, cnt - 1);
stacks[to][sps[to]++] = stacks[from][--sps[from]];
print();
solve(to, other, cnt - 1);
}
int main(void)
{
init(0);
print();
solve(2, 0, DISKS);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgojZGVmaW5lIERJU0tTIDQgLy8gMTAgbWF4CmludCBzdGFja3NbM11bRElTS1NdOwppbnQgc3BzWzNdOwoKdm9pZCBpbml0KGludCBmcm9tKQp7CiAgaW50IGk7CiAgc3BzWzJdID0gc3BzWzFdID0gc3BzWzBdID0gMDsKICBmb3IgKGkgPSAwOyBpIDwgRElTS1M7IGkrKykKICAgIHN0YWNrc1tmcm9tXVtpXSA9IERJU0tTIC0gaTsgLy8gZGlzayByYWRpdXMKICBzcHNbZnJvbV0gPSBESVNLUzsKfQoKdm9pZCBwcmludCh2b2lkKQp7CiAgaW50IGksIGosIGs7CiAgZm9yIChpID0gRElTS1MgLSAxOyBpID49IDA7IGktLSkKICB7CiAgICBmb3IgKGogPSAwOyBqIDwgMzsgaisrKQogICAgewogICAgICBpZiAoc3BzW2pdID4gaSkKICAgICAgewogICAgICAgIGZvciAoayA9IDA7IGsgPCAxMCAtIHN0YWNrc1tqXVtpXTsgaysrKQogICAgICAgICAgcHJpbnRmKCIgIik7CiAgICAgICAgZm9yIChrID0gMDsgayA8IDIgKiBzdGFja3Nbal1baV07IGsrKykKICAgICAgICAgIHByaW50ZigieCIpOwogICAgICAgIGZvciAoayA9IDA7IGsgPCAxMCAtIHN0YWNrc1tqXVtpXTsgaysrKQogICAgICAgICAgcHJpbnRmKCIgIik7CiAgICAgIH0KICAgICAgZWxzZQogICAgICB7CiAgICAgICAgcHJpbnRmKCIgICAgICAgICAgICAgICAgICAgICIpOyAvLyAxMCAqIDIKICAgICAgfQogICAgICBwcmludGYoIiAgIik7CiAgICB9CiAgICBwcmludGYoIlxuIik7CiAgfQogIHByaW50ZigiX19fX19fX19fL1xcX19fX19fX19fICBfX19fX19fX18vXFxfX19fX19fX18gIF9fX19fX19fXy9cXF9fX19fX19fX1xuXG4iKTsKfQoKdm9pZCBzb2x2ZShpbnQgdG8sIGludCBmcm9tLCBpbnQgY250KQp7CiAgaW50IG90aGVyID0gZnJvbSBeIHRvIF4gMzsKCiAgaWYgKCFjbnQpIHJldHVybjsKCiAgc29sdmUob3RoZXIsIGZyb20sIGNudCAtIDEpOwoKICBzdGFja3NbdG9dW3Nwc1t0b10rK10gPSBzdGFja3NbZnJvbV1bLS1zcHNbZnJvbV1dOwogIHByaW50KCk7CgogIHNvbHZlKHRvLCBvdGhlciwgY250IC0gMSk7Cn0KCmludCBtYWluKHZvaWQpCnsKICBpbml0KDApOwogIHByaW50KCk7CiAgc29sdmUoMiwgMCwgRElTS1MpOwogIHJldHVybiAwOwp9Cg==