#include <stdio.h>
#include <assert.h>
const int dmax= 1000001 ;
int a[ dmax] ;
int ab[ 5 ] = { 0 , 1 , 2 , 2 , 1 } ;
{
int ans= 0 ;
while ( n >= 4 )
{
n/= 4 ;
ans++;
}
return ans;
}
{
int i, ans;
ans= 1 ;
for ( i= 1 ; i<= n; i++ )
ans*= 4 ;
return ans;
}
int ans( int n)
{
int l, p, r, c, aux;
if ( n == 1 )
return 1 ;
if ( n == 2 )
return 2 ;
if ( n == 3 )
return 2 ;
if ( n == 4 )
return 1 ;
if ( p == n)
return 1 ;
r= n% p;
c= n/ p;
if ( r == 0 )
{
if ( c == 1 || c == 4 )
return 1 ;
else
return 2 ;
}
if ( r > 0 )
c++;
if ( c == 2 || c == 3 )
aux= ans( r) ;
{
if ( aux == 1 )
aux= 2 ;
else
aux= 1 ;
}
return aux;
}
int main( )
{
FILE * f;
int n = dmax- 1 , nrcif, i, j;
if ( n > 4 )
{
nrcif= 4 ;
a[ 1 ] = 1 ;
a[ 2 ] = 2 ;
a[ 3 ] = 2 ;
a[ 4 ] = 1 ;
i= 5 ;
while ( i <= n)
{
j= 1 ;
while ( j <= nrcif && i <= n)
{
if ( a[ i- nrcif] == 1 )
a[ i] = 2 ;
else
a[ i] = 1 ;
i++;
j++;
}
j= 1 ;
while ( j <= nrcif && i <= n)
{
if ( a[ i- 2 * nrcif] == 1 )
a[ i] = 2 ;
else
a[ i] = 1 ;
i++;
j++;
}
j= 1 ;
while ( j <= nrcif && i <= n)
{
a[ i] = a[ i- 3 * nrcif] ;
i++;
j++;
}
nrcif= nrcif* 4 ;
}
}
for ( int i = 1 ; i < 100000 ; i++ ) {
if ( ans( i) != a[ i] ) {
}
}
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxhc3NlcnQuaD4KIApjb25zdCBpbnQgZG1heD0xMDAwMDAxOwppbnQgYVtkbWF4XTsKIAppbnQgYWJbNV09IHswLDEsMiwyLDF9OwogCmludCBsb2coaW50IG4pCnsKICAgIGludCBhbnM9MDsKICAgIHdoaWxlIChuID49IDQpCiAgICB7CiAgICAgICAgbi89NDsKICAgICAgICBhbnMrKzsKICAgIH0KICAgIHJldHVybiBhbnM7Cn0KIAppbnQgcG93KGludCBuKQp7CiAgICBpbnQgaSxhbnM7CiAgICBhbnM9MTsKICAgIGZvciAoaT0xOyBpPD1uOyBpKyspCiAgICAgICAgYW5zKj00OwogICAgcmV0dXJuIGFuczsKfQogCmludCBhbnMoaW50IG4pCnsKICAgICBpbnQgbCxwLHIsYyxhdXg7CiAgICBib29sIGNvbmo7CgogICAgaWYgKG4gPT0gMSkKICAgICAgICByZXR1cm4gMTsKICAgIGlmIChuID09IDIpCiAgICAgICAgcmV0dXJuIDI7CiAgICBpZiAobiA9PSAzKQogICAgICAgIHJldHVybiAyOwogICAgaWYgKG4gPT0gNCkKICAgICAgICByZXR1cm4gMTsKICAgIGw9bG9nKG4pOwogICAgcD1wb3cobCk7CiAgICBpZiAocCA9PSBuKQogICAgICAgIHJldHVybiAxOwogICAgcj1uJXA7CiAgICBjPW4vcDsKICAgIGlmIChyID09IDApCiAgICB7CiAgICAgICAgaWYgKGMgPT0gMSB8fCBjID09IDQpCiAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIGVsc2UKICAgICAgICAgICAgcmV0dXJuIDI7CiAgICB9CiAgICBpZiAociA+IDApCiAgICAgICAgYysrOwogICAgY29uaj1mYWxzZTsKICAgIGlmIChjID09IDIgfHwgYyA9PSAzKQogICAgICAgIGNvbmo9dHJ1ZTsKICAgIGF1eD1hbnMocik7CiAgICBpZiAoY29uaikKICAgIHsKICAgICAgICBpZiAoYXV4ID09IDEpCiAgICAgICAgICAgIGF1eD0yOwogICAgICAgIGVsc2UKICAgICAgICAgICAgYXV4PTE7CiAgICB9CiAgICByZXR1cm4gYXV4Owp9CiAKaW50IG1haW4oKQp7CiAgICBGSUxFICpmOwogICAgaW50IG4gPSBkbWF4LTEsbnJjaWYsaSxqOwogICAgaWYgKG4gPiA0KQogICAgewogICAgICAgIG5yY2lmPTQ7CiAgICAgICAgYVsxXT0xOwogICAgICAgIGFbMl09MjsKICAgICAgICBhWzNdPTI7CiAgICAgICAgYVs0XT0xOwogICAgICAgIGk9NTsKICAgICAgICB3aGlsZSAoaSA8PSBuKQogICAgICAgIHsKICAgICAgICAgICAgaj0xOwogICAgICAgICAgICB3aGlsZSAoaiA8PSBucmNpZiAmJiBpIDw9IG4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChhW2ktbnJjaWZdID09IDEpCiAgICAgICAgICAgICAgICAgICAgYVtpXT0yOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIGFbaV09MTsKICAgICAgICAgICAgICAgIGkrKzsKICAgICAgICAgICAgICAgIGorKzsKICAgICAgICAgICAgfQogICAgICAgICAgICBqPTE7CiAgICAgICAgICAgIHdoaWxlIChqIDw9IG5yY2lmICYmIGkgPD0gbikKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKGFbaS0yKm5yY2lmXSA9PSAxKQogICAgICAgICAgICAgICAgICAgIGFbaV09MjsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBhW2ldPTE7CiAgICAgICAgICAgICAgICBpKys7CiAgICAgICAgICAgICAgICBqKys7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaj0xOwogICAgICAgICAgICB3aGlsZSAoaiA8PSBucmNpZiAmJiBpIDw9IG4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGFbaV09YVtpLTMqbnJjaWZdOwogICAgICAgICAgICAgICAgaSsrOwogICAgICAgICAgICAgICAgaisrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG5yY2lmPW5yY2lmKjQ7CiAgICAgICAgfQogICAgfQogCiAgICBmb3IgKGludCBpID0gMTsgaSA8IDEwMDAwMDsgaSsrKSB7CiAgICAJaWYgKGFucyhpKSAhPSBhW2ldKSB7CiAgICAJCXByaW50ZigiJWRcbiIsIGkpOwogICAgCX0KICAgIH0KfQ==