Denna uppgift är interaktiv. Efter att du skrivit ut varje rad måste du tömma utdatabufferten (flush). Du kan använda cout << flush i C++, System.out.flush() i Java och sys.stdout.flush() i Python. Du måste strikt följa instruktionerna i avsnittet Interaktion; annars kan du få bedömningar som fel svar (wrong answer), tidsgräns överskriden (time limit exceeded) eller andra.
Eftersom alla uppgifter har mytiska dvärgar som huvudpersoner kan det vara värt att äntligen tänka på något konkret.
Det finns en dold talföljd $A$ av längd $N$ som består av heltal i intervallet $[0, 2^N - 1]$. Din uppgift är att återställa den med hjälp av ett begränsat antal frågor. I varje fråga anger du en talföljd $B$ av längd $N$ med element i intervallet $[0, 2^N - 1]$. Svaret beräknas enligt följande:
- Talföljden $C$ skapas där det $i$-te elementet i $C$ är bitvis xor (bitwise xor) av de $i$-te elementen i $A$ och $B$. Vi betecknar xor med $\oplus$.
- Mängden $S$ konstrueras som mängden av alla värden som kan erhållas genom att ta xor av någon delmängd av elementen i $C$. Speciellt gäller att för den tomma delmängden är xor lika med $0$.
- Svaret på frågan är $|S|$.
Till exempel, om $A = (1, 4, 3)$ och $B = (0, 4, 7)$, då är $C = (1 \oplus 0, 4 \oplus 4, 3 \oplus 7) = (1, 0, 4)$ och $S = \{0, 1, 4, 5\}$, så svaret är $4$.
Bitvis xor av två tal $x$ och $y$ har bit $i$ satt om och endast om exakt ett av $x$ och $y$ har bit $i$ satt. Till exempel är $5 \oplus 3 = (101)_2 \oplus (011)_2 = (110)_2 = 6$. I C++ och Python är xor operatorn ^.
Interaktion
Talföljden $A$ är fastställd från början och beror inte på vilka frågor som ställs.
Läs först en rad som innehåller ett heltal $1 \le N \le 60$. Därefter kan du ställa frågor.
För att ställa en fråga, skriv ut en rad som innehåller ? följt av $N$ heltal i intervallet $[0, 2^N - 1]$. Läs som svar in ett heltal som är svaret.
När du är redo, skriv ut ! följt av de $N$ heltalen i den dolda talföljden. Därefter ska ditt program avslutas utan ytterligare utskrifter.
Kom ihåg att tömma utdatabufferten (flush) efter varje fråga och efter att du skrivit svaret. Sätt mellanslag mellan tal och symbolerna ?, !.
Exempel
Indata 1
3 4 8
Utdata 1
? 1 2 3 ? 0 0 0 ! 1 3 4
Förklaring
Förklaringen till exempelinteraktionen:
$N = 3$
Fråga ? 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\}$, svaret är $4$.
Fråga ? 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\}$, svaret är $8$.
Utdata ! 1 3 4: Den dolda talföljden är $A = (1, 3, 4)$.
Lokal testning
I avsnittet Files hittar du B.zip som innehåller exempeltester och en grader grader.cpp. För att testa din lösning, kompilera den och skicka sedan testnamnet och din körbara fil till den kompilerade ./grader:
./grader [test] [executable]
Till exempel: ./grader 0b.in ./abc
Exempelgradern garanteras inte bete sig identiskt med den officiella. Ingen av dem är dock adaptiv.