Universal Cup Judging System

Universal Cup

Time Limit: 1.0 s Memory Limit: 256 MB Total points: 100 Interactive
Statistics

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 identificatore id viene 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.

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.