O permutare cu elemente este un șir care conține toate numerele naturale , fiecare număr exact o dată.
Un exemplu de permutare cu elemente poate fi următorul șir: .
Despre o permutare vom spune că este de tip munte, dacă printre cele elemente ale sale există un element de indice astfel încât , secvența formată din primele elemente este strict crescătoare, iar secvența formată din ultimele elemente este strict descrescătoare. Adică, folosind notația matematică, avem .
Un exemplu de munte cu 6 elemente poate fi următorul șir: .
În problema noastră vom considera că avem o permutare cu elemente indexate de la la . Asupra elementelor permutării putem aplica două tipuri de operații de interschimbare simetrică:
- -- în permutarea se interschimbă elementele de pe pozițiile si , egal distanțate de cele două margini ale permutării. Operația necesită și .
- –- în permutarea se interschimbă simultan două perechi de elemente. Se vor interschimba simultan elementele de pe pozițiile și , respectiv elementele de pe pozițiile și . Operația se poate aplica dacă și numai dacă toate cele patru poziții sunt distincte două câte două. Cu alte cuvinte, operația necesită și mulțimea să aibă cardinal patru.
Plecând de la permutarea noastră și aplicând succesiv operații de ambele tipuri, unde fiecare tip poate fi folosit de zero sau mai multe ori, se poate obține o gamă variată de permutări.
Cerință
- Să se precizeze dacă pentru permutarea dată aplicând oricâte operații de swap sau dswap se poate obține o permutare de tip munte.
- Plecând de la permutarea dată, câte permutări de tip munte distincte se pot obține aplicând oricâte operații de swap sau dswap?
Date de intrare
Fișierul munte.in
conține pe prima linie două numere naturale și , reprezentând cerința care trebuie rezolvată, respectiv numărul de elemente ale permutării .
Pe a doua linie se găsesc numere naturale separate prin câte un singur spațiu, reprezentând permutarea .
Date de ieșire
Fișierul munte.out
va conține o singură linie, în funcție de cerință:
- pentru , în cazul în care se poate obține cel puțin o permutare de tip munte plecând de la șirul se va afișa
DA
, altfelNU
; - pentru , se va afișa un singur număr natural, reprezentând numărul permutărilor de tip munte distincte ce se pot obține aplicând doar operații de swap și dswap asupra permutării citite. Întrucât această valoare poate fi foarte mare, se va tipări rezultatul modulo .
Restricții și precizări
# | Punctaj | Restricții |
---|---|---|
1 | 3 | și |
2 | 3 | și |
3 | 9 | și |
4 | 9 | și |
5 | 5 | și |
6 | 6 | și |
7 | 6 | și , impar și |
8 | 7 | și , impar și |
9 | 7 | și , par și și |
10 | 8 | și , par și și |
11 | 8 | și |
12 | 9 | și |
13 | 10 | |
14 | 10 |
Exemplul 1
munte.in
2 7
3 4 2 7 1 6 5
munte.out
4
Explicație
și . Putem obține permutări de tip munte distincte:
-
– , se obține
– , se obține
– , se obține permutarea de tip munte -
– , se obține
– , se obține permutarea de tip munte -
– , se obține
– , se obține permutarea de tip munte -
– , se obține
– , se obține
– , se obține permutarea de tip munte
Exemplul 2
munte.in
1 6
6 3 4 5 1 2
munte.out
DA
Explicație
Se pot obține următoarele permutări de tip munte:
Exemplul 3
munte.in
1 6
1 2 3 5 4 6
munte.out
NU
Explicație
Nu există niciun mod de a transforma permutarea în munte.
Exemplul 4
munte.in
1 7
2 3 4 1 7 6 5
munte.out
NU
Explicație
Nu există niciun mod de a transforma permutarea în munte.