#include int N; int vstup[1000]; int zkus(int vstup_zacatek, int vstup_konec, int vystup_pocatecni) { int vystup_prvni, vystup_posledni; // Na začátku leží na výstupní hromádce jediný papír (předaný // jako třetí parametr). Ten prohlásíme za první i poslední. vystup_prvni = vystup_posledni = vystup_pocatecni; // Dokud je vstupní hromádka neprázdná... while (vstup_konec >= vstup_zacatek) { // Pokud se dá papír přidat na začátek výstupní hromádky... if (vstup[vstup_zacatek] == vystup_prvni - 1) { // ... přidej ho tam (nahraď původní počáteční papír) ... vystup_prvni = vstup[vstup_zacatek]; // ... a (virtuálně) ho odstraň ze vstupu. vstup_zacatek++; } else if (vstup[vstup_konec] == vystup_prvni - 1) { // přidání posledního papíru na začátek vystup_prvni = vstup[vstup_konec]; vstup_konec--; } else if (vstup[vstup_zacatek] == vystup_posledni + 1) { // přidání prvního papíru na konec vystup_posledni = vstup[vstup_zacatek]; vstup_zacatek++; } else if (vstup[vstup_konec] == vystup_posledni + 1) { // přidání posledního papíru na konec vystup_posledni = vstup[vstup_konec]; vstup_konec--; } else { // Nejde udělat žádný krok => končíme. return 0; } } // Vyprázdnili jsme vstupní hromádku => setříděno. return 1; } int main(void) { scanf("%d", &N); if (N <= 2) { printf("ano\n"); return 0; } for (int i = 0; i < N; i++) scanf("%d", &vstup[i]); if (zkus(1, N-1, vstup[0]) || zkus(0, N-2, vstup[N-1])) printf("ano\n"); else printf("ne\n"); }