#include #include int stack[30]; int stackCnt; int sorted[30]; int compare (const void * a, const void * b) { return ( *(int*)a - *(int*)b ); } void flip(int place) { int tmp; for (int i = 0; i <= place/2; ++i) { tmp = stack[i]; stack[i] = stack[place-i]; stack[place-i] = tmp; } } int main() { int pancake; char c; while (true) { stackCnt = 0; c = 0; while (scanf("%d%c", &pancake, &c) == 2 && c != '\n') { stack[stackCnt++] = pancake; printf("%d ", pancake); } if (c == '\n') { stack[stackCnt++] = pancake; printf("%d\n", pancake); } else break; // copy stack for (int i = 0; i < stackCnt; ++i) sorted[i] = stack[i]; qsort(sorted, stackCnt, sizeof(int), compare); // najit umisteni aktualne nejvetsi palacinky // 1. pokud je vespod pokracuj // 2. pokud je na vrchu, prehod ji na misto // 3. jinak ji prehod na vrsek a pokracuj bodem 2 for (int i = stackCnt - 1; i; --i) { if (sorted[i] == stack[i]) continue; else if (sorted[i] == stack[0]) { printf("%d ", stackCnt - i); flip(i); } else { int j; for (j = 0; stack[j] != sorted[i]; ++j); printf("%d ", stackCnt - j); flip(j); ++i; } } printf("0\n"); } return 0; }