#include void defrag(int n, int k) { int i; int disk[100100]; int cls, j; int pocet; int move = 0; int ok = 0; for (j = 0; j < 100100; j++) disk[j] = -1; j = 0; for (i = 0; i < k; i++) { scanf("%d", &pocet); while (pocet > 0) { scanf("%d", &cls); disk[cls-1] = j; j++; pocet--; } } do { ok = 0; // for (i = 0; i < n; i++) // printf("%d ", disk[i]); // printf("\n"); // printf("%d ", move); for (j = 0; j < n; j++) { if (disk[j] < 0) continue; if (disk[j] == j) {ok++; continue;} if (disk[j] < j && disk[disk[j]] == -1) { move++; ok++; disk[disk[j]] = disk[j]; disk[j] = -1; continue; } if (disk[j] > j) { if (disk[disk[j]] == -1) { move++; ok++; disk[disk[j]] = disk[j]; disk[j] = -1; } else if (disk[disk[j]] < disk[j]) { move++; for (cls = n-1; cls >= 0; cls--) if (disk[cls] == -1) break; disk[cls] = disk[j]; disk[j] = -1; } } } } while (ok < k); if (move == 0) printf("No optimalization needed.\n"); else printf("We need %d move operations.\n", move); } int main(void) { int n, k; while (1) { scanf("%d %d\n", &n, &k); if (n == 0 && k == 0) break; defrag(n, k); } return(0); }