#include #include #include int vlaky[200100]; int pocet[200100]; int odkial[200100]; int kam[200100]; int kam_i; int posledny[200100]; /* najvacsie cislo v ceste */ int pozicia[200100]; int main(void) { int vlakov, ciest; int i, j; int pouzitych = 0; int found = -1; int failed = 0; int max; while (1) { pouzitych = 0; found = -1; failed = 0; scanf("%d %d", &vlakov, &ciest); if (vlakov == 0 && ciest == 0) return 0; memset(vlaky, 0, sizeof(int) * vlakov); for (i = 0; i < vlakov; i++) { kam[i] = -1; posledny[i] = -1; }; kam_i = -1; for (i = 0; i < vlakov; i++) { scanf("%d", &vlaky[i]); vlaky[i]--; pozicia[vlaky[i]] = i; pocet[vlaky[i]]++; } if (vlakov == 0 || ciest == 0) { printf("Transportation failed\n"); continue; } for (i = 0; i < vlakov; i++) { if (pouzitych == 0) { kam_i = 0; kam[i] = pouzitych; posledny[pouzitych] = vlaky[i]; odkial[i] = pouzitych; pouzitych++; continue; } /* hladam mensi flek */ found = -1; max = -1; /* printf("vlak: %d pouzitch %d\n", i+1, pouzitych);-*/ for (j = 0; j < pouzitych; j++) { if (vlaky[i] < posledny[j]) continue; else { found = j; /*printf("%d found: %d\n", vlaky[i]+1, vlaky[j]+1);*/ if (max == -1) { max = j; continue; } else { if (posledny[max] < posledny[found]) { max = found; continue; } } } } /* printf("max: %d\n", max+1);*/ found = max; if (found == -1) /* vyrobime novy */ { /*printf("%d\n", vlaky[i]+1);*/ if (pouzitych >= ciest) { printf("Transportation failed\n"); failed = 1; break; } kam[i] = pouzitych; posledny[pouzitych] = vlaky[i]; odkial[i] = pouzitych; pouzitych++; } else { /* najdeme najmensi ktory je vacsi */ kam[i] = found; posledny[found] = vlaky[i]; odkial[i] = pouzitych; } } if (failed == 1) continue; for (i = 0; i < 200000; i++) { if (pocet[i] == 0) continue; printf("%d ", 1 + kam[i]); } printf("\n"); for (i = 0; i < 200000; i++) { if (pocet[i] == 0) continue; } for (i = 0; i < 200000; i++) { if (pocet[i] == 0) continue; /* printf("%d: %d poz %d\n", i, vlaky[i], pozicia[i]);*/ for (j = 0; j < pocet[i]; j++) printf("%d ", kam[pozicia[i]] + 1); /* j += pocet[pozicia[i]];*/ } printf("\n"); } return 0; }