单点时限: 0.5 sec
内存限制: 512 MB
随着教官的一声哨响,定向越野开始了。
定向越野,作为一种竞技项目,提供给队员的只有指北针和地图,要求参赛队员以最快的速度到访每一个标记以完成比赛。这个项目不仅考验参赛队员的跑步速度,也考验着队员对学校的熟悉程度。
Cuber QQ 觉得单纯的定向越野比赛太无聊了。所以他向教官提出了改革意见。于是,今年的定向越野比赛,与以往不太一样。 Cuber QQ 为了增加比赛的趣味性,在 $n$ 个打卡地点分别放了不同的数字卡片,选手需要收集打卡地点的数字卡片并且带到终点。在终点的时候, Cuber QQ 会要求你把这些数字卡片任意地组成 $k$ 个十进制数。你的分数就是这 $k$ 个数中的最小值。为了不为难你,这些数字卡片中不会出现数字 $0$ 。
Cuber QQ 会按照所有人的分数从高到低排序,获得每个参赛选手的排名。
Cuber QQ 对于每一个不同的选手,会给出不同的 $k$ ,所以他需要在选手之前算出最优的答案,即他需要知道 $n$ 个数字组成的 $k$ 个十进制数中最小值最大是多少。
输入第一行包含两个整数 $n,p$ ( $1\le n\le 10^5,1\le p\le 10^5$ ) ,分别表示卡片的数量,需要组成的十进制数个数和参赛选手数量。
第二行包含一个长度为 $n$ 的仅包含数字的字符串,表示 $n$ 个卡片上的数字。
接下来的 $p$ 行,每行一个整数 $k_i$ ,表示对第 $i$ 个选手给出的 $k$ ( $1\le k_i\le n$ ) 。
输出包含 $p$ 行,每行一个整数,表示每个选手能够获得的最大分数对 $1~000~000~007$ 取模的结果。
3 3 123 1 2 3
321 3 1