#include void reverse(int *pole, int N) { int i, tmp; for(i = 0; i < (N/2); i++) { tmp = pole[i]; pole[i] = pole[N - i - 1]; pole[N - i - 1] = tmp; } return ; } void pp(int * pole, int N) { int i; for(i = 0; i < N; i++) { printf("%d ", pole[i]); } printf("\n"); } int rep(int *pin, int *pout, int N, int *preq, int rmax) { int i, j , rsize = 0; while(1) { for(i = N - 1; (i >= 0) && (pin[i] == pout[i]); i--) ; if(i <= 0) return rsize; if(rsize >= rmax) { return -1; } for(j = 0; j < i; j++) { if(pin[j] == pout[i]) { break; } } if(j != 0) { preq[rsize++] = j + 1; reverse(pin, j + 1); } preq[rsize++] = i + 1; reverse(pin, i + 1); } } int main( int argc, char **argv ) { int N; int in[30]; int out[30]; int i; int req[52]; while(1) { scanf("%d ", &N); if(!N) return 0; for(i = 0; i < N; i++) { scanf("%d ", in + i); } for(i = 0; i < N; i++) { scanf("%d ", out + i); } if( (i = rep(in, out, N, req, 52)) < 0) { reverse(in, N); reverse(out, N); i = rep(in, out, N, req + 1, 50); if(i < 0) return 1; req[0] = N; req[i++] = N; } pp(req, i); } return 0; }