<table border=0> <tr> <td width="80%"> EJOI 2020 Day 2 </br> <b>xorsort</b> (Slovene) </td> <td width="20%"> <img align="right" width="100" src="https://i.imgur.com/KUVHoM0.png"> </td> </tr> </table> # XOR_Urejanje ## Naloga Dana sta celo število $S$ in polje $\mathbf{A}$, ki hrani $N$ nenegativnih celih števil, oštevilčenih od 1 naprej. Na elementih polja $\mathbf{A}$ so dovoljene naslednje operacije: Za poljuben indeks $i$, $(1 \le i \le N)$ izberete enega od sosedov elementa $A_i$, to je element $A_j$, kjer je $j = i - 1$ oziroma $j = i + 1$ in ga nadomestite z $(A_i \oplus A_j)$, kjer je $\oplus$ bitna operacija XOR, ki je definirana na koncu besedila. Vaša naloga je spremeniti polje $\mathbf{A}$ v urejeno polje: * Če je $S=1$ mora biti rezultirajoče polje strogo naraščajoče, $A_i < A_{i+1}$, za $1 \le i < N$. * Če je $S=2$ mora biti rezultirajoče polje nepadajoče, $A_i \le A_{i+1}$, za $1 \leq i < N$. Poiščte katerokoli zaporedje operacij, ki vas pripelje do rezultata. Ni potrebno optimirati števila operacij. Pomembno je le, da število operacij ne presega $40000$. ## Vhod V prvi vrstici vhoda se nahajata dve celi števili $N$ in $S$. V naslednji vrstici se nahaja $N$ celih števil: $A_1$ $A_2$ ... $A_N$, ki so elementi polja $\mathbf{A}$. ## Izhod Prva vrstica vsebuje celo število $K$, $(0 \leq K \leq 40000)$, ki predstavlja število operacij. V naslednjih $K$ vrsticah sta zapisani po dve celi števili, ki povesta, kako so potekale operacije v časovnem zaporedju: prvo število je indeks $i$ elementa, ki je bil nadomeščen, drugo število, pa je indeks $j$ elementa, ki je sodeloval v operaciji. ## Omejitve * $1 \leq S \leq 2$ * $2 \leq N \leq 1000$ * $0 \leq A_i \leq 2^{20}$ ## Podnaloge 1. podnaloga (25 točk): $2\leq N \leq 150$, $S=1$ in vsi elementi $A_i$ so različni. 2. podnaloga (35 točk): $2 \leq N \leq 200$, $S=1$ in vsi elementi $A_i$ so različni. 3. podnaloga (40 točk): $2 \leq N \leq 1000$ in $S=2$. ## Primeri ### 1. primer #### Vhod ``` 5 1 3 2 8 4 1 ``` #### Izhod ``` 3 1 2 4 3 5 4 ``` ### 2. primer #### Vhod ``` 5 2 4 4 2 0 1 ``` #### Izhod ``` 3 3 2 4 3 5 4 ``` ### Komentar V prvem primeru smo naredili naslednje operacije na elementih polja: $[3, 2, 8, 4, 1] \rightarrow [\mathbf{1}, 2, 8, 4, 1] \rightarrow [1, 2, 8, \mathbf{12}, 1] \rightarrow [1, 2, 8, 12, \mathbf{13}]$, medtem, ko smo v drugem primeru naredili naslednje operacije: $[4, 4, 2, 0, 1] \rightarrow [4, 4, \mathbf{6}, 0, 1] \rightarrow [4, 4, 6, \mathbf{6}, 1] \rightarrow [4, 4, 6, 6, \mathbf{7}]$. Rezultat operacije XOR na bitih $a$ in $b$ je enak 0 če je $a=b$, sicer pa je rezultat enak 1. Operacija XOR na celih številih se izvede na istoležnih bitih v binarnem zapisu števil. Na primer $75 \oplus 29 = 86$ $1001011 \oplus 0011101 = 1010110$ V C/C++ in Javi lahko uporabite implementirano operacijo XOR, ki se označi z znakom `^`.