// #pragma GCC optimize(3, "Ofast", "inline", "unroll-loops")
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 2000010;
const int mod = 19930726;
const int inf = 1e18;
char s[N], t[N], buc[N];
int p[N];
// p[i]: 以 i 为中心的最长回文半径长度
int power(int a, int b, int c)
{
int ans = 1;
while (b)
{
if (b & 1)
ans = ans * a % c;
a = a * a % c, b >>= 1;
}
return ans;
}
signed main()
{
// cin.tie(0)->sync_with_stdio(false);
int n, k;
cin >> n >> k;
scanf("%s", s + 1);
for (int i = 1; i <= n; ++i)
t[i * 2] = s[i], t[i * 2 + 1] = '$';
t[1] = '$';
n = n * 2 + 1;
for (int i = 1; i <= n; ++i)
s[i] = t[i];
int pos = 0, r = 0;
for (int i = 1; i <= n; ++i)
{
if (i < r)
p[i] = min(p[2 * pos - i], r - i);
else
p[i] = 1;
while (i + p[i] <= n && i - p[i] >= 1 && s[i + p[i]] == s[i - p[i]])
++p[i];
if (p[i] + i > r)
pos = i, r = i + p[i];
++buc[p[i] - 1];
}
int s = 1;
for (int i = n; i; --i) if (i & 1)
{
k -= buc[i];
if (k < 0)
{
s = s * power(i, k + buc[i], mod) % mod;
break;
}
else
s = s * power(i, buc[i], mod) % mod;
}
if (k > 0)
s = -1;
cout << s << '\n';
return 0;
}
样例过了,hack 也过了,但是 Wa 10pts,求大佬教/kel