#include int b, g, n; int order[1000002]; typedef struct elem { int pos; int goods; int bay; } el; el heapx[3000]; el *heap = &heapx[-1]; int last[1000002]; int next[1000002]; int where[1000002]; void swap (int i, int j) { el sw; sw = heap[i]; heap[i] = heap[j]; heap[j] = sw; where[heap[i].goods] = i; where[heap[j].goods] = j; } void bubble_up (int i) { while (i >= 2) { if (heap[i/2].pos < heap[i].pos) swap (i/2, i); else return; } } void bubble (int i) { while (i < b) { if (2 * i + 1 <= b) { if (heap[2*i+1].pos > heap[2*i].pos) { if (heap[i].pos < heap[2*i+1].pos) swap (i, 2*i+1); else goto return_label; } else { if (heap[i].pos < heap[2 * i].pos) swap (i, 2*i); else goto return_label; } } else if (2 * i <= b) { if (heap[i].pos < heap[2*i].pos) swap (i, 2*i); else goto return_label; } else goto return_label; } return_label: /* for (i = 0; i < b; i++) printf ("pos %d goods %d bay %d\n", heapx[i].pos, heapx[i].goods, heapx[i].bay); */ return; } int main() { int z, zz; scanf ("%d", &zz); for (z = 1; z <= zz; z++) { int i; if (z > 1) printf ("\n"); printf ("Case %d:\n", z); scanf("%d%d%d", &b, &g, &n); for (i = 0; i < n; i++) { scanf ("%d", &order[i]); } for (i = 0; i <= g; i++) { last[i] = n + g; where[i] = 0; } for (i = n - 1; i >= 0; i--) { next[i] = last[order[i]]; last[order[i]] = i; } for (i = 0; i < b; i++) { heapx[i].pos = n + g + b; heapx[i].goods = 0; heapx[i].bay = i + 1; } /* solve */ for (i = 0; i < n; i++) { int x; x = where[order[i]]; if (x) { printf ("NO ACTION\n"); heap[x].pos = next[i]; bubble_up(x); } else { printf ("LOAD %d %d\n", heap[1].bay, order[i]); where[heap[1].goods] = 0; heap[1].pos = next[i]; heap[1].goods = order[i]; where[order[i]] = 1; bubble (1); } } } return 0; }