#include class Node { public: int v; Node *next; Node(int val) { v = val; next = NULL; } ~Node() { if (next) delete (next); } void print() { printf("%d ", v + 1); if (next) next->print(); } }; class List { public: Node *start; List() { start = NULL; } ~List() { delete(start); } void insert(Node *nnode) { if (!start) start = nnode; else { nnode->next = start; start = nnode; } } void print() { if (start) start->print(); } }; int main() { int c, t; List a[200000]; int b[200000]; int d[200000]; int vagon; int maxint; while (1) { maxint = 0; scanf("%d %d", &c, &t); if ((c == 0) && (t == 0)) return 0; for (int i = 0; i < t; i++) { b[i] = -1; } int inserted = 0; for (int i = 0; i < c; i++) { scanf("%d", &vagon); if (maxint < vagon) { maxint = vagon; } inserted = 0; for (int j = 0; (j < t); j++) { if (b[j] <= vagon) { b[j] = vagon; a[j].insert(new Node(j)); d[i] = j; inserted = 1; break; } } if (!inserted) { printf("Transportation failed\n"); break; } } if (!inserted) { while ((c = getchar()) != 10) ; continue; } for (int i = 0; i < c; i++) { printf("%d ", d[i] + 1); } printf("\n"); for (int i = maxint; i >= 0; i--) { a[i].print(); } printf("\n"); } return 0; }