传送门
观察发现 x x x不大,应该可以直接模拟
而且光标最多移动到 x x x位置,意味着只需要知道 [ 1 , x ] [1,x] [1,x]的字符是什么就可以了
所以先模拟到 x x x位置,然后就直接计算长度即可
很无语的题目(不过作为 d i v 1 A div1A div1A也一般般八…)
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 3e6+10;
const int mod = 1e9+7;
char a[maxn];
int x;
signed main()
{
int t; cin >> t;
while( t-- )
{
scanf("%lld%s",&x,a+1);
int now = strlen( a+1 ), flag = 0;
for(int i=1;i<=x;i++)
{
//暂时暴力模拟
if( flag==0 )
{
int last = now;
for(int ci=1;ci<=(a[i]-'0')-1;ci++)
for(int j=i+1;j<=last;j++)
a[++now] = a[j];
if( now>=1e6 ) flag = 1;
}
else//长度已经大于1e6了
now = ( now+(now-i)*(a[i]-'0'-1) )%mod;
}
cout << (now%mod+mod)%mod << endl;
}
}