#include #include int data[200000]; int nblocks,files; int main (void) { int j,i,c; int p,a; int x; while (1) { scanf ("%d%d",&nblocks,&files); if (! nblocks && !files) return 0; for (i = 0; i < nblocks; i++) data[i] = -1; p = 0; x = 0; for (i = 0; i < files; i++) { scanf ("%d",&c); for (j= 0; j < c; j++) { scanf ("%d",&a); a--; if (a != p) x++; else a = -1; if (a >= nblocks) a = -1; data[p] = a; p++; } } for (i = 0; i < nblocks; i++) if (data[i] >=0) { int cur = data[i], limit = i; while (cur != limit && cur>=0) { int p = data[cur]; data[cur] = -1; cur = p; } if (cur == limit) x++; } if (!x) printf("No optimization needed.\n"); else printf("We need %d move operations.\n",x); } }