Questo problema è interattivo. Dopo aver stampato ogni riga, devi svuotare il buffer di output (flush). Puoi usare cout << flush in C++, System.out.flush() in Java e sys.stdout.flush() in Python. Devi seguire rigorosamente le istruzioni nella sezione Interazione; in caso contrario potresti ricevere verdetti come risposta errata (wrong answer), tempo limite superato (time limit exceeded) o altri.
Poiché tutti i problemi hanno come protagonisti dei nani mitologici, potrebbe valere la pena pensare finalmente a qualcosa di tangibile.
C'è una sequenza nascosta $A$ di lunghezza $N$ composta da interi nell'intervallo $[0, 2^N - 1]$. Il tuo compito è recuperarla utilizzando un numero limitato di query. In ogni query, fornisci una sequenza $B$ di lunghezza $N$ con elementi nell'intervallo $[0, 2^N - 1]$. La risposta viene calcolata come segue:
- Viene creata la sequenza $C$ in cui l'$i$-esimo elemento di $C$ è lo xor bit a bit (bitwise xor) degli $i$-esimi elementi di $A$ e $B$. Indichiamo lo xor con $\oplus$.
- L'insieme $S$ viene costruito come l'insieme di tutti i valori ottenibili effettuando lo xor di un qualche sottoinsieme di elementi di $C$. In particolare, per il sottoinsieme vuoto, lo xor è $0$.
- La risposta alla query è $|S|$.
Ad esempio, se $A = (1, 4, 3)$ e $B = (0, 4, 7)$, allora $C = (1 \oplus 0, 4 \oplus 4, 3 \oplus 7) = (1, 0, 4)$ e $S = \{0, 1, 4, 5\}$, quindi la risposta è $4$.
Lo xor bit a bit di due numeri $x$ e $y$ ha il bit $i$ impostato se e solo se esattamente uno tra $x$ e $y$ ha il bit $i$ impostato. Ad esempio, $5 \oplus 3 = (101)_2 \oplus (011)_2 = (110)_2 = 6$. In C++ e Python, lo xor è l'operatore ^.
Interazione
La sequenza $A$ è fissata all'inizio e non dipende dalle query effettuate.
Per prima cosa, leggi una riga contenente un intero $1 \le N \le 60$. Poi puoi effettuare delle query.
Per effettuare una query, stampa una riga contenente ? seguito da $N$ interi nell'intervallo $[0, 2^N - 1]$. In risposta, leggi un intero che rappresenta la risposta.
Quando sei pronto, stampa ! seguito dagli $N$ interi della sequenza nascosta. Dopodiché il tuo programma deve terminare senza ulteriore output.
Ricordati di svuotare l'output (flush) dopo ogni query e dopo aver scritto la risposta. Metti degli spazi tra i numeri e i simboli ?, !.
Esempi
Input 1
3 4 8
Output 1
? 1 2 3 ? 0 0 0 ! 1 3 4
Note
La spiegazione per l'interazione di esempio:
$N = 3$
Query ? 1 2 3: $B = (1, 2, 3)$, $C = (1 \oplus 1, 3 \oplus 2, 4 \oplus 3) = (0, 1, 7)$, $S = \{0, 1, 6, 7\}$, la risposta è $4$.
Query ? 0 0 0: $B = (0, 0, 0)$, $C = (1 \oplus 0, 3 \oplus 0, 4 \oplus 0) = (1, 3, 4)$, $S = \{0, 1, \dots, 7\}$, la risposta è $8$.
Output ! 1 3 4: La sequenza nascosta è $A = (1, 3, 4)$.
Test in locale
Nella sezione Files puoi trovare B.zip contenente i test di esempio e un grader grader.cpp. Per testare la tua soluzione, compilala, quindi passa il nome del test e il tuo eseguibile al ./grader compilato:
./grader [test] [executable]
Ad esempio: ./grader 0b.in ./abc
Non è garantito che il grader di esempio si comporti in modo identico a quello ufficiale. Tuttavia, nessuno dei due è adattivo.