Korupcija

시간 제한1초메모리 제한2048 MB

요약
N비트 수 전체를 정확히 한 비트만 다른 쌍으로 묶되, 각 비트 위치에서 다른 쌍의 개수가 주어진 값과 같도록 배정해야 합니다.
난이도

어려움10점 중 9점

유형
분할 정복, 재귀, 조합론, 비트 연산
정답자
아직 제출이 없습니다

문제

... Korupcija svima, a ne samo njima. Ja nudim korupciju, koruptivni red, rad i rast. Sve što vam ovi majstori ponude, ja nudim duplo. Predlažem i osmi padež: Kome? Koliko? ...

Mali Mirko bio je očaran govorom stričeka s televizije. Bio je uvjeren kako je razumio poruku: morao je korumpirati bitove svojih binarnih brojeva.

Mirko promatra brojeve 0,1,…,2N−10, 1, \dots , 2^N − 1 (kao binarne brojeve s NN binarnih znamenki). Vođen željom za korupcijom, Mirko će izabrati dva broja XX i YY (0≤X,Y<2N0 ≤ X, Y < 2^N) koja se razlikuju u točno jednom bitu. Mirko će tada prebrisati taj bit znakom “?” u oba broja XX i YY, čime je postigao korupciju: brojevi XX i YY više se ne mogu razlikovati. Mirko će ponavljati ovaj postupak s preostalim brojevima, dok na kraju ne dobije ukupno 2N−12^N−1 parova brojeva koji se ne mogu razlikovati. Dakle, svaki broj između 00 i 2N−12^N − 1 član je točno jednog para i dva broja mogu biti u paru isključivo ako se razlikuju u točno jednom bitu (binarnoj znamenci).

Radi većeg izazova, Mirko je odlučio da želi imati točno ai parova kojima znak “?” stoji na mjestu i-tog bita, za i=0,1,…,N−1i = 0, 1, \dots , N − 1. Pri tome, bitove brojimo od manje značajnih do više značajnih, pa tako ii-ti bit odgovara vrijednosti 2i2^i. Pomozite Mirku te napravite odabir parova koji zadovoljava tražene uvjete, ili odredite kako takav odabir ne postoji.

입력

U prvom je retku prirodan broj NN iz teksta zadatka.

U drugom je retku niz od NN nenegativnih cijelih brojeva a_ia\_i, za i=0,…,N−1i = 0, \dots , N − 1, pri čemu a_ia\_i predstavlja traženi broj parova koji se razlikuju u ii-tom bitu. Zbroj tih brojeva iznosi točno 2N−12^N−1.

출력

Ukoliko nije moguće napraviti odabir parova koji zadovoljava uvjete zadatka, u jedini redak ispišite -1.

Inače, ispišite 2N−12^N−1 redaka. U svaki redak ispišite dva razmakom odvojena broja XX i YY koji predstavljaju odabrani par. Parove možete ispisati u bilo kojem redoslijedu.

Ukoliko postoji više rješenja, ispišite bilo koje.

예제3

  1. 예제 1

    입력
    2
    2 0
    
    예상 출력
    0 1
    2 3
    
  2. 예제 2

    입력
    2
    1 1
    
    예상 출력
    -1
    
  3. 예제 3

    입력
    3
    2 0 2
    
    예상 출력
    0 1
    2 6
    3 7
    4 5