Luca sta preparando un sistema di messaggistica semplice per consentire la comunicazione tra gli studenti (soprattutto durante le verifiche, un sistema simile torna sempre utile).
Luca ha finito di realizzare il sistema e lo sta provando: purtroppo qualcosa non funziona e bisogna cercare di capire la situazione.
Da buon sistemista, la prima cosa che fa è analizzare il file di log conservato sul server che registra ogni singolo messaggi scambiato tra gli utenti.
Un utente è identificato con nome (con lunghezza massima 10 caratteri tra lettere minuscole e numeri).
Dopo un po’ di analisi, Luca ha capito che il problema non risiede nel server: tutti i messaggi sono memorizzati correttamente.
Probabilmente quindi è l’app che ha realizzato per gli smartphone dei suoi compagni ad avere qualche problema.
Per verificare ciò, aiutalo a rispondere a due tipi di domande:
utente INVIATI
che deve restituire l’elenco degli utenti a cui utente ha inviato un messaggio
utente RICEVUTI
che deve restituire l’elenco degli utenti da cui utente ha ricevuto un messaggio.
Così come il file di log è ordinato cronologicamente, allo stesso modo gli elenchi dell’utente dovranno essere nello stesso ordine con cui gli utenti compaiono nel log.
Dati di input
L’input è composto da 1+N+R righe.
- La prima riga contiene due interi, N e R, rispettivamente il numero di righe del file di log (ovvero, quanti messaggi sono stati scambiati) e il numero di richieste a cui si deve rispondere.
- Le successive N righe sono nella forma mittente destinatario e indicano che un messaggio è stato inviato da mittente a destinatario.
- Le ultime R righe sono nella forma utente TIPORICHIESTA indicando che Luca vuole sapere l’elenco degli utenti da cui utente ha ricevuto un messaggio (nel caso di RICEVUTI) oppure l’elenco degli utenti a cui utente ha inviato un messaggio (nel caso di INVIATI)
Dati di output
L’output deve essere formato da R righe.
Ciascuna di queste righe deve contenere un intero non negativo Ui, il numero di utenti che corrispondono alla R-esima richiesta, seguito dai nomi degli utenti.
Assunzioni
- N, R ≤ 100000.
- Nel 50% dei casi vale che N, R ≤ 1000.
Esempi di input/output
input.txt | output.txt |
3 2 luca mario luca pietro francesca pietro luca INVIATI pietro RICEVUTI |
2 mario pietro 2 luca francesca |
Note
- Più messaggi possono essere inviati dallo stesso mittente anche verso lo stesso destinatario.
Tutti i messaggi dovranno comparire nell’output del problema. - In ogni messaggio, il mittente non coincide mai con il destinatario.
/** www.valcon.it ABC - Messaggi */ #include#include #include