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é il lavoro nella miniera è duro e richiede molto tempo, i nani hanno deciso di cercare aiuto per automatizzare alcuni dei loro compiti. Il loro compito attuale è classificare $N$ minerali (identificati da numeri da $1$ a $N$) in diverse classi. Per aiutare in questo, il Nano Operaio ha installato un nuovo nastro trasportatore. I nani possono aggiungere campioni di minerali all'inizio del nastro e rimuoverli dalla sua fine (cioè rimuovere i minerali che sono stati aggiunti per primi).
Sfortunatamente, questo nastro trasportatore non ha una base di conoscenza, quindi non può identificare la classe di alcun minerale su di esso. Tuttavia, ha un'altra funzione utile: mostra quante classi distinte di minerali si trovano attualmente sul nastro. Si scopre che questo è sufficiente per la miniera, poiché i nani non hanno bisogno di conoscere la classe di ciascun minerale: devono solo separare i minerali in mucchi della stessa classe.
Puoi aiutare i nani a risolvere questo compito usando il nastro trasportatore?
Interazione
Le classi dei minerali sono fissate all'inizio e non dipendono dalle query effettuate.
Per prima cosa, leggi una riga contenente un intero $N$, il numero di minerali da classificare. Successivamente, puoi eseguire operazioni dei seguenti due tipi:
+ id— il minerale con identificatoreidviene aggiunto all'inizio del nastro trasportatore.-— il minerale alla fine del nastro trasportatore viene rimosso. Se il nastro è vuoto, non succede nulla.
Dopo ogni operazione, il nastro trasportatore stampa una riga contenente il numero di classi distinte attualmente presenti su di esso.
Per stampare la risposta, stampa prima una riga contenente ! seguito da $k$, che è il numero di classi distinte nella miniera. Poi stampa $k$ righe, ciascuna delle quali descrive una classe. Ogni riga deve contenere un numero $c_i$ seguito da $c_i$ identificatori di minerali di quella classe. Ciascuno degli $N$ minerali deve apparire in esattamente una classe. Puoi stampare le classi e i minerali all'interno di ciascuna classe in qualsiasi ordine.
Ricordati di svuotare l'output (flush) dopo ogni operazione e dopo aver scritto la risposta. Ricordati di mettere degli spazi tra i numeri e i simboli +, -, !. Devi leggere tutti i dati dall'interattore.
Limiti
$1 \le N \le 500$, puoi eseguire al massimo $35\,000$ operazioni.
Esempi
Input 1
3 1 2 2 2
Output 1
+ 1 + 2 + 3 - ! 2 2 1 3 1 2
Note
Nel primo test di esempio, $N = 3$ e le classi dei minerali $1, 2, 3$ sono rispettivamente $1, 2, 1$.
Test in locale
Nella sezione Files puoi trovare A.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.