rt 双哈希只过了n<=10
#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+9;
const int mod2=1e9+7;
map<pair<int,int> ,int> m;
int main()
{
int n;
cin>>n;
string s;
cin>>s;
long long ans=0,ans2=0;
m[make_pair(ans,ans2)]++;
ans*=26;
ans+=s[0]-'a'+1;
ans2*=26;
ans2+=s[0]-'a'+1;
m[make_pair(ans,ans2)]++;
stack<char> st;
st.push(s[0]);
for(int i=1;i<s.size();i++)
{
if(st.size()!=0)
{
if(st.top()==s[i])
{
ans-=st.top()-'a'+1;
ans=(ans+mod)%mod;
ans/=26;
ans2-=st.top()-'a'+1;
ans2=(ans2+mod2)%mod2;
ans2/=26;
st.pop();
}
else
{
ans*=26;
ans+=s[i]-'a'+1;
ans2*=26;
ans2+=s[i]-'a'+1;
st.push(s[i]);
}
}
else
{
ans*=26;
ans+=s[i]-'a'+1;
ans2*=26;
ans2+=s[i]-'a'+1;
st.push(s[i]);
}
ans%=mod;
ans2%=mod2;
// cout<<ans<<endl;
m[make_pair(ans,ans2)]++;
}
map<pair<int,int>,int>::iterator it;
long long cnt=0;
for(it=m.begin();it!=m.end();it++)
{
long long x=it->second;
cnt+=(x-1)*x/2;
}
cout<<cnt;
return 0;
}