Codici nascosti (codes)

Vengono dati un insieme di parole ed un testo. Il testo contiene un messaggio composto da parole (inserite nel testo in modo particolare ed eventualmente ambiguo).

Le parole e il testo sono sequenze di lettere maiuscole e minuscole dell'alfabeto inglese. C'è differenza tra lettere minuscole e maiuscole. La lunghezza di una parola è calcolata nel solito modo: per esempio, la parola CON ha lunghezza 3.

Le lettere di una parola non devono apparire consecutivamente nel testo. Per esempio, se la parola CON è presente nel testo, sarà sempre nella forma CuOvN dove u e v indicano sequenze arbitrarie di lettere (e quindi, eventualmente, vuote). Diremo che CuOvN è una copertura per CON. In generale, una copertura per una parola è una sottosequenza del testo per cui la prima e l'ultima lettera della sottosequenza sono uguali, rispettivamente, alla prima e all'ultima lettera della parola ed è possibile ottenere la parola cancellando alcune (o nessuna) lettere della sottosequenza. Una parola può capitare in una o più coperture o può non essere presente affatto nel testo, e una copertura può coprire più di una parola.

Una copertura è identificata dalla sua posizione iniziale (posizione della sua prima lettera) e dalla sua posizione finale (posizione della sua ultima lettera) nel testo. La prima lettera del testo è in posizione 1. Diciamo che due coperture C1 e C2 non si sovrappongono se la posizione finale di C1 è minore della posizione iniziale di C2 e viceversa.

Per trovare una soluzione è necessario estrarre il messaggio nascosto nel testo. Una soluzione è un insieme di elementi, ognuno dei quali è formato da una parola e da una copertura per quella parola, in modo che le seguenti condizioni siano tutte soddisfatte:

Nel caso ci siano più soluzioni è necessario darne in output una sola.

Dati in input

Ci sono due file di input: words.inp e text.inp. Il file words.inp contiene la lista di parole e text.inp contiene il testo.

Dati in output

Il file di output si chiamerà codes.out.

Vincoli

Esempio

words.inp text.inp codes.out
4
RuN
RaBbit
HoBbit
StoP
StXRuYNvRuHoaBbvizXztNwRRuuNNP
12
2 9 21
1 4 7
1 24 28

Il messaggio della soluzione è "RuN RaBbit RuN"; un'altra soluzione sarebbe potuta essere "Run HoBbit Run".