Operazioni Avanzate sul Dizionario

Vi viene fornito un dizionario inizialmente vuoto e q interrogazioni (queries). Ogni interrogazione può essere di uno dei seguenti tre tipi:
  • Tipo 1: Inserire una stringa nel dizionario.
  • Tipo 2: Verificare se una stringa esiste nel dizionario.
  • Tipo 3: Eliminare una stringa dal dizionario.
Il vostro obiettivo è implementare un programma in grado di gestire queste interrogazioni in modo efficiente.
Per le interrogazioni di tipo 2, se la stringa è presente nel dizionario, stampate Yes, altrimenti stampate No.

Input

La prima riga dell’input contiene un intero q (1 ≤ q ≤ 100 000), che rappresenta il numero di interrogazioni.
Le successive q righe descrivono le singole interrogazioni. Ogni riga inizia con un intero type (1, 2 o 3), che indica il tipo di interrogazione.
  • Se type = 1: la riga sarà seguita da uno spazio e da una stringa s (1 ≤ |s| ≤ 1000), che rappresenta la stringa da inserire nel dizionario. La stringa è composta esclusivamente da lettere minuscole inglesi.
  • Se type = 2: la riga sarà seguita da uno spazio e da una stringa s (1 ≤ |s| ≤ 1000), che rappresenta la stringa da verificare nel dizionario. La stringa è composta esclusivamente da lettere minuscole inglesi.
  • Se type = 3: la riga sarà seguita da uno spazio e da una stringa s (1 ≤ |s| ≤ 100), che rappresenta la stringa da eliminare dal dizionario. La stringa è composta esclusivamente da lettere minuscole inglesi.
È garantito che la somma delle lunghezze di tutte le stringhe delle interrogazioni non superi .

Output

Per ogni interrogazione di tipo 2, stampate Yes se la stringa è presente nel dizionario, altrimenti stampate No.

Esempi

Input
Uscita
7 1 abc 1 xyz 2 abc 3 abc 2 abc 2 xyz 2 abo
Yes No Yes No
 

Constraints

Time limit: 4 seconds

Memory limit: 512 MB

Output limit: 1 MB

To check your solution you need to sign in
Sign in to continue