IOI '99 - Antalya-Belek, Turkey
A set of code words and a text are given. The text is supposed to contain a message made up of the code words embedded in the text in a peculiar (and possibly ambiguous) way.
The code words and the text are sequences made up of the upper and lower
case letters of the English alphabet only. Case-sensitivity is assumed.
The length of a code word is defined in the usual way: For example,
the code word ALL has length .
The letters of a code word do not have to occur consecutively in the
given text. For example, the code word ALL will always occur in the
text within a subsequence in the form of AL
L where
and
denote arbitrary (possibly empty) sequences of letters. We say that
A
L
L is a covering sequence for ALL. In general, a
covering sequence for a code word is defined as a substring of the text
such that the first letter and the last letter of the substring are the
same as those of the code word and it is possible to obtain the code
word by deleting some (possibly none) of the letters of the substring.
It should be noted that a code word may occur within one or more
covering sequences or may not occur in the text at all, and that a
covering sequence may be a covering sequence for more than one code
word.
A covering sequence is identified by its start position (position of its
first letter) and its end position (position of its last letter) in the
text. (The first letter of the text is at position .) We say that two
covering sequences, say
and
, do not overlap if the start
position of
is greater than (
) the end position of
or vice
versa. Otherwise we say that the two covering sequences overlap.
To extract the message hidden in the text you undertake the task of forming a solution. A solution is a set of items, each consisting of a code word and a covering sequence for this code word, so that the following conditions are all satisfied:
- the covering sequences do not overlap with each other
- a covering sequence does not exceed
in length
- the sum of the lengths of the code words is maximal. (Each item contributes the length of the code word it contains to the sum.)
In case there is more than one solution you are required to report only one solution.
Input Specification
The first line of input contains the number of code words,
. Each of the following
lines contains one code word. Each
code word has a numerical ID. IDs are assigned in increasing order
starting from
(hence the first code word has the ID
, the second
,
and so on). No code word has a length greater than
.
The final line of input is the text, whose length is at least
character and no more than
characters.
We say that a covering sequence for a code word
is
right-minimal if no proper prefix of
(a proper prefix is an
initial subsequence of
that is not equal to
) is a covering sequence
for
. For example, for the code word ALL, AAALAL is a
right-minimal covering sequence whereas AAALALAL is also a covering
sequence, but not right-minimal.
It is guaranteed that in the given text:
- for each position in the text the number of right-minimal covering
sequences containing that position does not exceed
- the number of right-minimal covering sequences does not exceed
.
Output Specification
The first line of output should contain the sum obtained by your
solution. Each of the following lines will determine an item in your
solution. A line consists of three space-separated integers: ,
,
and
. Here
is the ID-number of the code word that occurs within
the covering sequence identified by the start position
and end
position
. The order of the output lines that follow the first line
is not important.
Sample Input
4
RuN
RaBbit
HoBbit
StoP
StXRuYNvRuHoaBbvizXztNwRRuuNNP
Sample Output
12
2 9 21
1 4 7
1 24 28
(Remark: The hidden message that could be extracted from the solution is
RuN RaBbit RuN
. (An alternative solution would yield RuN HoBbit RuN
).
Be reminded that the message is not to appear in the output.)
Comments