梅書房にて出版されている、空前絶後の大人気を博する漫画 「空色☆ボーイズアップ」 の編集者、矢野 ――― 彼は毎日のように作家との対応に追われている。ただでさえ忙しいというのに、近々同作品のコミックアンソロジーが発売されることもあり、多くの作家と連絡を取り合わなければならず、今日もてんやわんやである。
原稿の締め切りはもう明日までと迫ってきていた。編集者にとっては生きた心地がしない期間と言っても過言ではない。それもそのはず、この期に及んで何の連絡もなく原稿をよこさない不届き者がいるのだ。・・・しかし愚痴をこぼしていてもしかたがない、作家とのやりとりならばよくあることだ、と、感情を押し殺しながら、今日も催促の連絡を入れるのだ。そうしてメールを送信しようとした、その時だった。
なんと、期限ぎりぎりの今になって原稿が届いているではないか!しかも、あの遅刻常習犯のボプ子先生が??起こっていることが信じられず、怪訝そうにメールフォルダを見つめる矢野は、さっそく添付されている原稿を確認し、その冒頭を読んですべてを察した。
・・・これは、またしても只者ではないものが来た、と。
ボプ子先生は過激な表現で世間を震わせる、現代でも異色と言える作家である。たいていの原稿はそのままでは載せられないので、伏せるべき表現は伏せ、かつできるだけ元の表現を変えずに編集する必要があるのだ。もう時間も遅いが、これだけは終わらせて帰りたいところだ。
文字列 S と、 N 個の文字列 p_1, p_2, ..., p_N からなる文字列の集合 P が与えられる。文字列 S に対して、次の操作を考える。
S 中の i 文字目の文字を s_i とする。S 中の任意の連続した部分文字列 S_{ij} = s_i s_{i+1} ... s_j と P 中の任意の要素 p_k の組に対して、S_{ij} \neq p_k を満たすようにするための最小の操作回数を求めよ。
入力は以下の形式で与えられる。
S N p_1 p_2 $\vdots$ p_N
操作回数の最小値を 1 行で出力せよ。末尾の改行を忘れないこと。
brainfuck 1 fuck
1
例えば、 “brainf*ck” とすることで条件を満たします。
aaa 1 a
3
検閲はとても厳しいです。
hellshakeyano 3 hell shake key
2
この場合は、例えば “h*llsha*eyano” とすることで条件を満たします。 1 つの文字を ‘*’ に変えることによって、集合 P に属する複数の文字列が同時に S の部分文字列として現れなくなることもあります。