munte

Time limit: 0.2s Memory limit: 512MB Input: munte.in Output: munte.out

O permutare cu NN elemente este un șir a1,a2,,aNa_1, a_2, \dots, a_N care conține toate numerele naturale 1,2,,N1, 2, \dots , N, fiecare număr exact o dată.

Un exemplu de permutare cu 66 elemente poate fi următorul șir: [3,1,6,4,5,2][3, 1, 6, 4, 5, 2].

Despre o permutare vom spune că este de tip munte, dacă printre cele NN elemente ale sale există un element de indice MM astfel încât 1<M<N1 < M < N, secvența formată din primele MM elemente este strict crescătoare, iar secvența formată din ultimele NM+1N–M+1 elemente este strict descrescătoare. Adică, folosind notația matematică, avem a1<a2<<aM1<aM>aM+1>>aNa_1 < a_2< \ldots < a_{M - 1}< a_M > a_{M+1} > \ldots > a_N.

Un exemplu de munte cu 6 elemente poate fi următorul șir: [1,2,4,5,6,3][1, 2, 4, 5, 6, 3].

În problema noastră vom considera că avem o permutare cu NN elemente indexate de la 11 la NN. Asupra elementelor permutării putem aplica două tipuri de operații de interschimbare simetrică:

  • swap(P,NP+1)swap(P, N-P+1) -- în permutarea aa se interschimbă elementele de pe pozițiile PP si NP+1N-P+1, egal distanțate de cele două margini ale permutării. Operația necesită 1PN1 \leq P \leq N și PNP+1P \neq N-P+1.
  • dswap(P,Q,NP+1,NQ+1)dswap(P, Q, N-P+1, N-Q+1) –- în permutarea aa se interschimbă simultan două perechi de elemente. Se vor interschimba simultan elementele de pe pozițiile PP și QQ, respectiv elementele de pe pozițiile NP+1N-P+1 și NQ+1N-Q+1. 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ă 1P,QN1 \leq P, Q \leq N și mulțimea {P,Q,NP+1,NQ+1}\{P, Q, N-P+1, N-Q+1\} 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 C{1,2}C \in \{1, 2\} și NN, reprezentând cerința care trebuie rezolvată, respectiv numărul de elemente ale permutării aa.

Pe a doua linie se găsesc NN numere naturale separate prin câte un singur spațiu, reprezentând permutarea aa.

Date de ieșire

Fișierul munte.out va conține o singură linie, în funcție de cerință:

  • pentru C=1C = 1, în cazul în care se poate obține cel puțin o permutare de tip munte plecând de la șirul aa se va afișa DA, altfel NU;
  • pentru C=2C = 2, 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 111 181 111111 \ 181 \ 111.

Restricții și precizări

  • C{1,2}C \in \{1, 2\}
  • 4N200 0004 \leq N \leq 200 \ 000
# Punctaj Restricții
1 3 C=1C = 1 și N8N \leq 8
2 3 C=2C = 2 și N8N \leq 8
3 9 C=1C = 1 și N15N \leq 15
4 9 C=2C = 2 și N15N \leq 15
5 5 C=1C = 1 și N30N \leq 30
6 6 C=2C = 2 și N30N \leq 30
7 6 C=1C = 1 și N2000N \leq 2 000, NN impar și aN+12=Na_{\frac{N+1}{2}} = N
8 7 C=2C = 2 și N2000N \leq 2 000, NN impar și aN+12=Na_{\frac{N+1}{2}} = N
9 7 C=1C = 1 și N2000N \leq 2 000, NN par și aN2=Na_{\frac{N}{2}} = N și aN2+1=N1a_{\frac{N}{2} + 1} = N-1
10 8 C=2C = 2 și N2000N \leq 2 000, NN par și aN2=Na_{\frac{N}{2}} = N și aN2+1=N1a_{\frac{N}{2} + 1} = N-1
11 8 C=1C = 1 și N2000N \leq 2 000
12 9 C=2C = 2 și N2000N \leq 2 000
13 10 C=1C = 1
14 10 C=2C = 2

Exemplul 1

munte.in

2 7
3 4 2 7 1 6 5

munte.out

4

Explicație

N=7N = 7 și a=[3,4,2,7,1,6,5]a = [3, 4, 2, 7, 1, 6, 5]. Putem obține 44 permutări de tip munte distincte:

  1. dswap(1,5,7,3)dswap(1, 5, 7, 3)[3,4,2,7,1,6,5][\textcolor{red}{3}, 4, \textcolor{blue}{2}, 7, \textcolor{red}{1}, 6, \textcolor{blue}{5}], se obține [1,4,5,7,3,6,2][1, 4, 5, 7, 3, 6, 2]
    dswap(2,5,6,3)dswap(2, 5, 6, 3)[1,4,5,7,3,6,2][1, \textcolor{red}{4}, \textcolor{blue}{5}, 7, \textcolor{red}{3}, \textcolor{blue}{6}, 2], se obține [1,3,6,7,4,5,2][1, 3, 6, 7, 4, 5, 2]
    swap(3,5)swap(3, 5)[1,3,6,7,4,5,2][1, 3, \textcolor{red}{6}, 7, \textcolor{red}{4}, 5, 2], se obține permutarea de tip munte [1,3,4,7,6,5,2][1, 3, 4, 7, 6, 5, 2]

  2. dswap(1,3,7,5)dswap(1, 3, 7, 5)[3,4,2,7,1,6,5][\textcolor{red}{3}, 4, \textcolor{red}{2}, 7, \textcolor{blue}{1}, 6, \textcolor{blue}{5}], se obține [2,4,3,7,5,6,1][2, 4, 3, 7, 5, 6, 1]
    dswap(2,3,6,5)dswap(2, 3, 6, 5)[2,4,3,7,5,6,1][2, \textcolor{red}{4}, \textcolor{red}{3}, 7, \textcolor{blue}{5}, \textcolor{blue}{6}, 1], se obține permutarea de tip munte [2,3,4,7,6,5,1][2, 3, 4, 7, 6, 5, 1]

  3. dswap(7,2,1,6)dswap(7, 2, 1, 6)[3,4,2,7,1,6,5][\textcolor{blue}{3}, \textcolor{red}{4}, 2, 7, 1, \textcolor{blue}{6}, \textcolor{red}{5}], se obține [6,5,2,7,1,3,4][6, 5, 2, 7, 1, 3, 4]
    dswap(5,7,3,1)dswap(5, 7, 3, 1)[6,5,2,7,1,3,4][\textcolor{blue}{6}, 5, \textcolor{blue}{2}, 7, \textcolor{red}{1}, 3, \textcolor{red}{4}], se obține permutarea de tip munte [2,5,6,7,4,3,1][2, 5, 6, 7, 4, 3, 1]

  4. dswap(2,5,6,3)dswap(2, 5, 6, 3)[3,4,2,7,1,6,5][3, \textcolor{red}{4}, \textcolor{blue}{2}, 7, \textcolor{red}{1}, \textcolor{blue}{6}, 5], se obține [3,1,6,7,4,2,5][3, 1, 6, 7, 4, 2, 5]
    dswap(2,1,6,7)dswap(2, 1, 6, 7)[3,1,6,7,4,2,5][\textcolor{red}{3}, \textcolor{red}{1}, 6, 7, 4, \textcolor{blue}{2}, \textcolor{blue}{5}], se obține [1,3,6,7,4,5,2][1, 3, 6, 7, 4, 5, 2]
    swap(2,6)swap(2, 6)[1,3,6,7,4,5,2][1, \textcolor{red}{3}, 6, 7, 4, \textcolor{red}{5}, 2], se obține permutarea de tip munte [1,5,6,7,4,3,2][1, 5, 6, 7, 4, 3, 2]

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:
1 2 4 5 6 31 \ 2 \ 4 \ 5 \ 6 \ 3
3 6 5 4 2 13 \ 6 \ 5 \ 4 \ 2 \ 1

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.

Log in or sign up to be able to send submissions!