#include int bit( int i ); int setstep( int *idou, int i, int step, int N ); int main() { int N; int idou[10000+1]; int bits; scanf("%d\n", &N ); for( int i; i < 10000+1; i++ ) { idou[i] = 0; } idou[1] = 1; setstep( idou, 1-bit(1), idou[1]+1, N ); setstep( idou, 1+bit(1), idou[1]+1, N ); /**/ for( int i = 0; i <= N; i++ ) { printf("%d %d\n", i, idou[i] ); } /**/ if( idou[N] == 0 ) { printf("-1\n"); } else { printf("%d\n", idou[N]); } return 0; } int setstep( int *idou, int i, int step, int N ) { if( step > N ) { return 0; } if( i <= 0 ) { return 0; } if( idou[i] == 0 ) { idou[i] = step; setstep( idou, i-bit(i), idou[i]+1, N ); setstep( idou, i+bit(i), idou[i]+1, N ); return 0; } if( idou[i] > step ) { idou[i] = step; setstep( idou, i-bit(i), idou[i]+1, N ); if( i+ bit(i) <= N ) { setstep( idou, i+bit(i), idou[i]+1, N ); } } return 0; } int bit( int i ){ int num = 0; int mask = 1; for ( ; mask != 0 ; mask = mask << 1 ){ if (i & mask ) num++; } return num; }