#include int main() { int sem[100010], kam[100010], n, k, i, oper, x; register int j; scanf("%i %i", &n, &k); while(n!=0 || k!=0) { // printf("%i %i\n", n, k); j = 1; oper = 0; for(i=1; i<=n; i++) kam[i] = 0; for(; k>0; k--) { scanf("%i", &x); // printf("%i\n", x); for(; x>0; x--) { scanf("%i", sem + j); kam[sem[j]] = j; j++; } } k = j - 1; for(i=1; i<=k; i++) { if(sem[i] != i) { // printf("i = %i, sem[i] = %i\n", i, sem[i]); j = i; while(kam[j] != 0 && kam[j] != i) { j = kam[j]; } if(kam[j] == 0) { while(sem[j] <= k) { // printf("%i", j); j = sem[j]; sem[kam[j]] = kam[j]; oper++; } // kam[sem[j]] = 0; sem[j] = j; oper++; } else { while(sem[j] != j) { oper++; sem[j] = j; j = kam[j]; } oper++; } } } if(oper == 0) printf("No optimization needed.\n"); else printf("We need %i move operations.\n", oper); scanf("%i %i", &n, &k); } }