#include #include #include #define MAX 200000 int train_in[MAX]; int train_out[MAX]; int track[MAX]; int in[MAX]; int out[MAX]; int N, M; void print(void) { int i; for (i = 0; i < N-1; i++) { printf("%d ", in[i]); } printf("%d\n", in[N-1]); for (i = 0; i < N-1; i++) { printf("%d ", out[i]); } printf("%d\n", out[N-1]); } bool put(int i) { if (i == N) { return true; } for (int j = 0; j < M; j++) { if (track[j] <= train_in[i]) { int old = track[j]; int old_train_out[MAX]; int old_out[MAX]; memcpy(&old_train_out, &train_out, sizeof(train_out)); memcpy(&old_out, &out, sizeof(out)); track[j] = train_in[i]; in[i] = j+1; bool ok = false; int a,b,c,d; a = train_in[i]; c = j+1; for (int k = 0; k < i; k++) { if ((ok == true) || (train_out[k] > train_in[i])) { b = train_out[k]; train_out[k] = a; a = b; d = out[k]; out[k]= c; c = d; ok = true; } } train_out[i] = a; out[i] = c; if (put(i+1)) { return true; } track[j] = old; memcpy(&train_out, &old_train_out, sizeof(train_out)); memcpy(&out, &old_out, sizeof(out)); } } return false; } int main(void) { for(;;) { scanf("%d %d\n", &N, &M); if ((N == 0) && (M == 0)) return 0; for (int i = 0; i < N; i++) { scanf("%d", &train_in[i]); track[i] = 0; } if (put(0)) { print(); } else { printf("Transportation failed\n"); } } return 0; }