Carneginonはシックな吟遊詩人でした。彼は若い頃。しかし、彼は軽薄だったし、多くのギャングに参加しました。最近、Caneginonは、王は彼の詩にショックを受けましたので、戴冠されることになったし、彼に賞に金メダル講師を決めました。したがって、王国の人々のほとんどは、彼を訪ねて来ました。
しかし、メダルlectirerとして、Carneginonは年長者と若い世代を含め、親切に訪問者を扱わなければなりません。秩序を維持するために、すべての訪問者はそれに刻ま魔法フィールドにライセンスを受けました。そして、ライセンス上の魔法フィールドは小文字で構成されていました。
Carneginonは、他の人が彼の古い歳以下であるかどうかを判断することができ固有のライセンスを持っていました。今、私たちはCarneginon免許証上の配列であることを前提と T Tと訪問者のライセンス上のシーケンスである S 各訪問者のためにS.、
-
長さならば T Tがの長さよりも長くなっている S S、それは訪問者が年下であることを明らかです。IFおよび S Sはサブのある T T、Carneginonは、訪問者を呼び出します
my child!
。それ以外の場合は、Carneginonは、訪問者を呼び出しますoh, child!
。 -
長さならば T Tがの長さよりも小さい S S、それは訪問者が年長者であることは明らかです。IFおよび T Tはの部分文字列である S S、Carneginonは、訪問者を呼び出します
my teacher!
。それ以外の場合は、Carneginonは、訪問者を呼び出しますsenior!
。 -
長場合はもちろん、 T Tはの長さに等しい S S、ビジターはCarneginonのピアです。IFおよび T Tはに等しい S S、それが不適切な方法とCarneginonから入力された訪問者が叫ぶだろうことを示して
jntm!
。それ以外の場合は、Carneginonは、訪問者を呼び出しますfriend!
。
さて、あなたは知っている T T(Carneginon免許証)、 QのQ(訪問者数)と、各訪問者のライセンス(S_I S Iを)。あなたはCaneginonが、彼はすべての訪問者を見たときに言って必要なものを判断することはできますか?
入力
最初の行は、文字列である T Carneginon免許を表すT、。
2行目は整数であり、 q個の訪問者の数を意味Q、。
そして、 m個のMラインが、行ごとに、文字列がある S 訪問者の免許を表すSは、。
1 \当量| T | \当量10 ^ 5 1 ≤ | T | ≤ 1 0 5 1 \当量| S | \当量10 ^ 5 1 ≤ | S | ≤ 1 0 5 1 \当量のq \の当量1000年1 ≤ Q ≤ 1 0 0 0
それは、その保証されている のq \回(| S | + | T |)\当量10 ^ 7 Q × (| S | + | T | )≤ 1 0 7。
出力
あります QのQラインが。
それぞれについて S Carneginonが正しく言うべきかS、出力。
サンプル入力
ABCDE 6 ABCDE AAAAA ABCD AAAA ABCDEF abccdefg
サンプル出力
jntm! 友人! 私の子供! ああ、子! 私の先生! 上級!
KMP也能AC
書式#include <iostreamの> の#include <アルゴリズム> 書式#include <cmath> 使用して名前空間はstdを、int型のmain() { のstd ::イオス:: sync_with_stdio(偽); 長い長いN; 文字列sの、。 一方、(CIN >> S >> N) { int型 LS = s.size()。 一方、(N-- ) { CIN >> 。 int型ラ= a.size(); もし(LS == LA) { もし (S == a)は coutの << " jntm!" << てendl; 他の 裁判所未満 << " 友よ!" << てendl; } それ以外の 場合(LS < ラ) { 場合(a.find(S)=!a.npos) はcout << " 先生!" << てendl; 他の 裁判所未満 << " 先輩!" << てendl; 他に { 場合(!s.find(A)= s.npos) はcout << " 私の子供!" << てendl; 他の 裁判所未満 << " ああ、子!" << てendl; } } } 戻り 0 。 }