#include <stdio.h>
typedef struct
{
int column;
int row;
} STK;
STK stk[1024];
int top = 0;
int size = 3;
void putTo( int i, int j ){}
int checkIfPosIsOK( int i, int j ){ return 1; }
void removeFrom( int i, int j ){}
static STK pop()
{
return stk[--top];
}
static void push( STK v )
{
stk[top++] = v;
}
static int empty()
{
return ( top == 0 );
}
void ff( int column )
{
int row;
STK tmp;
for( ;; )
{
L1:
for( row = 1; row <= size; ++row )
{
if( checkIfPosIsOK( row, column ) )
{
putTo( row, column );
if( column < size )
{
tmp.column = column;
tmp.row = row;
push( tmp );
column = column + 1;
goto L1;
L2:
}
else
{
printf( "else: %d\n", column
); }
removeFrom( row, column );
}
}
if( !empty() )
{
tmp = pop();
column = tmp.column;
row = tmp.row;
goto L2;
}
else
break;
}
}
int main()
{
ff( 4 );
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp0eXBlZGVmIHN0cnVjdAp7CiAgICBpbnQgY29sdW1uOwogICAgaW50IHJvdzsKfSBTVEs7CgpTVEsgc3RrWzEwMjRdOwppbnQgdG9wID0gMDsKaW50IHNpemUgPSAzOwoKdm9pZCBwdXRUbyggaW50IGksIGludCBqICl7fQppbnQgY2hlY2tJZlBvc0lzT0soIGludCBpLCBpbnQgaiApeyByZXR1cm4gMTsgfQp2b2lkIHJlbW92ZUZyb20oIGludCBpLCBpbnQgaiApe30KCnN0YXRpYyBTVEsgcG9wKCkKewogICAgcmV0dXJuIHN0a1stLXRvcF07Cn0KCnN0YXRpYyB2b2lkIHB1c2goIFNUSyB2ICkKewogICAgc3RrW3RvcCsrXSA9IHY7Cn0KCnN0YXRpYyBpbnQgZW1wdHkoKQp7CiAgICByZXR1cm4gKCB0b3AgPT0gMCApOwp9Cgp2b2lkIGZmKCBpbnQgY29sdW1uICkKewogICAgaW50IHJvdzsKICAgIFNUSyB0bXA7CgogICAgZm9yKCA7OyApCiAgICB7CkwxOgogICAgICAgIGZvciggcm93ID0gMTsgcm93IDw9IHNpemU7ICsrcm93ICkKICAgICAgICB7CiAgICAgICAgICAgIGlmKCBjaGVja0lmUG9zSXNPSyggcm93LCBjb2x1bW4gKSApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHB1dFRvKCByb3csIGNvbHVtbiApOwoKICAgICAgICAgICAgICAgIGlmKCBjb2x1bW4gPCBzaXplICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBwcmludGYoICJpZjogJWRcbiIsIGNvbHVtbiApOwoKICAgICAgICAgICAgICAgICAgICB0bXAuY29sdW1uID0gY29sdW1uOwogICAgICAgICAgICAgICAgICAgIHRtcC5yb3cgPSByb3c7CiAgICAgICAgICAgICAgICAgICAgcHVzaCggdG1wICk7CgogICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IGNvbHVtbiArIDE7CgogICAgICAgICAgICAgICAgICAgIGdvdG8gTDE7CkwyOgogICAgICAgICAgICAgICAgICAgIHByaW50ZiggImlmOiAlZFxuIiwgY29sdW1uICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCAiZWxzZTogJWRcbiIsIGNvbHVtbiApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJlbW92ZUZyb20oIHJvdywgY29sdW1uICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmKCAhZW1wdHkoKSApCiAgICAgICAgewogICAgICAgICAgICB0bXAgPSBwb3AoKTsKICAgICAgICAgICAgY29sdW1uID0gdG1wLmNvbHVtbjsKICAgICAgICAgICAgcm93ID0gdG1wLnJvdzsKCiAgICAgICAgICAgIGdvdG8gTDI7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgICAgYnJlYWs7CiAgICB9Cn0KCmludCBtYWluKCkKewogICAgZmYoIDQgKTsKCiAgICByZXR1cm4gMDsKfQo=