//Let's join Kaede Takagaki Fan Club !! #include #include #include using namespace std; typedef long long ll; typedef pair P; typedef pair P1; typedef pair P2; #define pu push #define pb push_back #define mp make_pair #define eps 1e-7 #define INF 1000000000 #define fi first #define sc second #define rep(i,x) for(int i=0;i void dmp(T a){ rep(i,a.size()) cout << a[i] << " "; cout << endl; } template bool chmax(T&a, T b){ if(a < b){ a = b; return 1; } return 0; } template bool chmin(T&a, T b){ if(a > b){ a = b; return 1; } return 0; } template void g(T &a){ cin >> a; } template void o(const T &a,bool space=false){ cout << a << (space?' ':'\n'); } //ios::sync_with_stdio(false); const ll mod = 1000000007;//998244353 template void add(T&a,T b){ a+=b; if(a >= mod) a-=mod; } int ran[500005],sa[500005],rui[500005],tmp[500005]; void construct_sa(string S){ int n = S.size(); rep(i, n){ sa[i] = i; } sort(sa, sa+n, [&](int a, int b){ return S[a] == S[b] ? a > b : S[a] < S[b]; }); for(int i=1;i= n || ran[sa[i]+k] != ran[sa[i+1]+k]); rep(i, n) ran[i] = tmp[i]; } //consider empty string for(int i=n;i>0;i--) sa[i] = sa[i-1]; sa[0] = n; rep(i,n+1) ran[sa[i]] = i; } int lcp[400005]; void construct_lcp(string S) { int n = S.size(); for(int i=0;i<=n;i++) ran[sa[i]] = i; int h = 0; lcp[0] = 0; for(int i=0;i> n >> m >> q; cin >> s; s = reduce(s); m *= n/s.size(); n = s.size(); //cout << n << " " << m << endl; if(m > 4){ int n = s.size(); s = s+s+s+s; construct_sa(s); construct_lcp(s); ll cur = 0; rep(i,100005) ans2[i] = -1; mapM; vector>vec; for(int i=1;i<=4*n;i++){ //cout << sa[i]%n << " " << (sa[i] < 3*n?1:0) << endl; if(sa[i] >= 3*n){ M[++cur] = sa[i]%n; } else if(ans2[sa[i]%n] == -1){ //answer for n*(m-2)+sa[i]%n ans2[sa[i]%n] = 1; vec.pb(mp(++cur, sa[i]%n)); cur += (m-2); } } rep(i,q) { ll a; g(a); if(M.find(a) != M.end()){ o(1LL*(m-1)*n + M[a] + 1, (i==q-1?0:1)); } else{ int x = POSL(vec, mp(a, INF)); x--; assert(vec[x].fi <= a && a <= vec[x].fi+m-2); int id = vec[x].sc; o(1LL*(m-2)*n+id - 1LL*n*(a-vec[x].fi) + 1, (i==q-1?0:1)); } } } else{ string t = ""; rep(i,m) t += s; construct_sa(t); construct_lcp(t); rep(i,q) { int a; g(a); o(1+sa[a], (i==q-1?0:1)); } } }