2日目 問題2(プレフィックス)

 生物学で扱うある種の対象は、それを構成する成分を並べたもの(成分列 と呼ぶ、sequence of their constituents)で表わされる。成分を 英大文字で表わす。生物学者は長い成分列を、もっと短い「基」(primitive)と 呼ばれる文字列に分解することに興味を持っている。

 S を成分列とし、P を基の集合とする。P から n 個の基 p1, ..., pn を選んで、それらを並べてできる p1... pn が S に等しいとき、S は P から合成可能であるという。 ただし、p1, ..., pn の中には同じ基がいくつ あってもよいし、P の基すべてを使う必要もない。 例えば、成分列 ABABACABAAB は基の集合

  A, AB, BA, CA, BBC
から合成可能である。

 S の先頭から始まる K 文字のことを、長さ K の S の接頭語(prefix) と呼ぶ。基の集合 P と成分列 T が与えられたとき、P から合成可能な 接頭語のうちで長さが最大のものの長さを求めるプログラムを書け。

入力データ

 2つのファイルからデータを入力する。ファイル INPUT.TXT には 基の集合 P の内容が書いてあり、ファイル DATA.TXT には調べたい 成分列 T が書いてある。INPUT.TXT の1行目は P に属する 基の個数 N (1≦N≦100) が書いてある。 それにつづく 2N 行には、1つの基を表わすために2行ずつを使い、 その最初の行には基の長さ L (1≦L≦20) が、 次の行には大文字 'A'〜'Z' から成る長さ L の文字列が書いてある。 N 個の基はすべて異なる。
 ファイル DATA.TXT の各行の左端には英大文字が1つだけ書いてあり、 最終行にはピリオド('.')が1つだけ書いてある。
 成分列の長さは 1 以上 500,000 以下である。

出力データ

 P から合成可能な、長さが最大の、T の接頭語の長さをファイル OUTPUT.TXT の1行目に出力せよ。

入出力例

 図1は、2つの入力ファイルの例と、それに対する出力ファイルである。

    INPUT.TXT      DATA.TXT          OUTPUT.TXT
    ---------   --------     ----------
    5              A                 11 
    1              B 
    A              A 
    2              B 
    AB             A 
    2              C 
    BA             A
    2              B 
    CA             A 
    3              A 
    BBC            B 
                   C 
                   B 
                   . 

図1