美丽
时间限制:C/C++/Rust/Pascal 3秒,其他语言6秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

\hspace{15pt}给定一个长度为 n 的字符串 s。定义一个字符串 p 为美丽的,当且仅当 p某一个循环移位^\texttt{[1]}(只要存在一个即可)是 s子串^\texttt{[2]}
\hspace{15pt}现在给你 q 次询问,每次给定一个字符串 t_i。你需要判断 t_i 的每个前缀^\texttt{[3]}是否是美丽的。

【名词解释】
\hspace{15pt}偏移量为 r 的向左循环移位^\texttt{[1]}:即将字符串前 r 个元素按原顺序移动到字符串末尾,剩余元素整体向前移动。例如,记原字符串 s = a_1a_2\cdots a_n,当偏移量为 1 时,得到 s' = a_2a_3\cdots a_n{\color{orange}{a_1}}
\hspace{15pt}子串^\texttt{[2]}:从原字符串中,连续的选择一段字符(可以全选、可以不选)得到的新字符串。
\hspace{15pt}字符串的前缀^\texttt{[3]}:从字符串的第一个字符开始,向后连续取若干个字符得到的字符串。更具体地,字符串 si 个字符构成的字符串被称为 s 的第 i 个前缀,也记为 s[1..i]

输入描述:

\hspace{15pt}每个测试文件均包含多组测试数据。第一行输入一个整数 T\left(1\leqslant T\leqslant 10^4\right) 代表数据组数,每组测试数据描述如下:

\hspace{15pt}第一行输入两个整数 n,q\left(1\leqslant n,q\leqslant 2\times 10^5\right),表示字符串 s 的长度、询问次数。
\hspace{15pt}第二行输入一个长度为 n,仅由小写字母组成的字符串 s,表示主串。
\hspace{15pt}此后 q 行,第 i 行输入一个长度为 |t_i|,仅由小写字母组成的字符串 t_i \left(1\leqslant |t_i|\leqslant 2\times 10^5\right),表示第 i 次询问的字符串。

\hspace{15pt}除此之外,保证单个测试文件的 n 之和、|t_i| 之和不超过 2\times 10^5

输出描述:

\hspace{15pt}对于每一组测试数据的第 i 次询问,新起一行输出一个长度为 |t_i| 的字符串,第 j 个字符表示字符串 t_i 的第 j 个前缀是否美丽。若美丽,则输出 1,否则输出 0
示例1

输入

复制
1
10 3
abcacabcab
ccaba
abcda
bcaba

输出

复制
10110
11100
11111