can someone tell me what is wrong in my code i'm getting WA.
please help!
here is my code-
#include<bits/stdc++.h>
#define ll long long
#define MOD 1000000007
#define p 29
using namespace std;
map <ll, int> mp;
ll power(ll a, ll b)
{
ll x = 1, y = a;
while (b > 0)
{
if (b % 2 == 1)x = (x*y) % MOD;
y = (y*y) % MOD;
b /= 2;
}
return x%MOD;
}
ll MMI(ll b)
{
return power(b, MOD - 2) % MOD;
}
ll prefix[100005];
void pre(int l,string s)
{
prefix[0] = 0;
for (int i = 1; i <= l; i++)
{
prefix[i] = prefix[i - 1] + (s[i - 1])*power(p, i - 1);
prefix[i] %= MOD;
}
}
ll solve(int l1, int r1)
{
ll v1, v2;
v1 = (prefix[r1 + 1] - prefix[l1] + MOD) % MOD;
v2 = power(p, l1);
return (v1*MMI(v2)) % MOD;
}
int main()
{
int t;
scanf("%d", &t);
while (t--)
{
mp.clear();
int l, k;
scanf("%d%d", &l, &k);
string s;
cin >> s;
pre(l,s);
ll ans;
for (int i = 0; i < l; i++)
{
if (i + k > l)break;
else
{
ans = solve(i, i + k - 1);
mp[ans] = 1;
}
}
printf("%d\n", mp.size());
}
return 0;
}