#include #include int M, N, i, X, T, OK, j; int track_tails[200000]; int leave_order[200000]; int in_order[200000]; int get_track(int X) { int max = -1, i, track = -1; for (i = 0; i < M; i++) { if (track_tails[i] > max && X >= track_tails[i]) { track = i; max = track_tails[i]; } } if (track >= 0) { track_tails[track] = X; } return track; } int main() { while (1) { scanf("%d %d", &N, &M); OK = 1; if (!N && !M) return 0; memset(leave_order, 0, 200000); memset(in_order, 0, 200000); memset(track_tails, 0, 200000); for (i = 0; i < N && OK; i++) { scanf("%d", &X); T = get_track(X); /*printf("TAILS: "); for (j = 0; j < M; j++) printf("%d ", track_tails[j]); printf("\n");*/ if (T < 0) { printf("Transportation failed\n"); for (j = i+1; j < N; j++) scanf("%d", &X); OK = 0; } else { in_order[i] = T+1; leave_order[X-1] = T+1; } } if (OK) { for (i = 0; i < N-1; i++) printf("%d ", in_order[i]); printf("%d ", in_order[N-1]); printf("\n"); for (i = 0; i < N-1; i++) printf("%d ", leave_order[i]); printf("%d ", leave_order[N-1]); printf("\n"); } } }