#include <cstdio>
#include <hash_map>
#include <algorithm>
using namespace std;
const int MX = 3e5 + 5 ;
typedef long long LL;
LL pref[ MX] , Res = 0 ;
char a[ MX] ;
int n;
LL v( char x)
{
if ( x >= 'a' && x <= 'z' )
return 1LL << ( x - 'a' ) ;
return 1LL << ( x - 'A' + ( 'z' - 'a' + 1 ) ) ;
}
//map<LL,LL> maski;
struct eq
{
bool operator( ) ( LL s1, LL s2) const
{
return s1 == s2;
}
} ;
hash_map< LL,LL> maski;
//hash_map<LL,LL,hash<LL>,eq> maski;
int main( )
{
scanf ( "%d%s" , & n, a) ;
pref[ n] = 0 ;
for ( int i = n- 1 ; i >= 0 ; -- i)
pref[ i] = pref[ i+ 1 ] xor v( a[ i] ) ;
maski[ 0 ] = 1 ;
for ( int i = n- 1 ; i >= 0 ; -- i)
{
for ( int x = 0 ; x < 62 ; ++ x)
{
LL maska = 1LL << x;
if ( maski.find ( pref[ i] xor maska) ! = maski.end ( ) )
Res + = maski[ pref[ i] xor maska] ;
}
if ( maski.find ( pref[ i] ) ! = maski.end ( ) )
Res + = maski[ pref[ i] ] ;
maski[ pref[ i] ] ++ ;
}
printf ( "%lld\n " , Res) ;
return 0 ;
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPGhhc2hfbWFwPgojaW5jbHVkZSA8YWxnb3JpdGhtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IE1YID0gM2U1ICsgNTsKdHlwZWRlZiBsb25nIGxvbmcgTEw7CkxMIHByZWZbTVhdLCBSZXMgPSAwOwpjaGFyIGFbTVhdOwppbnQgbjsKCkxMIHYoY2hhciB4KQp7CiAgICAgICAgaWYoeCA+PSAnYScgJiYgeCA8PSAneicpCiAgICAgICAgICAgICAgICByZXR1cm4gMUxMIDw8ICh4IC0gJ2EnKTsKICAgICAgICByZXR1cm4gMUxMIDw8ICh4IC0gJ0EnICsgKCd6JyAtICdhJyArIDEpKTsgCn0KCi8vbWFwPExMLExMPiBtYXNraTsKCnN0cnVjdCBlcQp7CiAgICAgICAgYm9vbCBvcGVyYXRvcigpKExMIHMxLCBMTCBzMikgY29uc3QKICAgICAgICB7CiAgICAgICAgcmV0dXJuIHMxID09IHMyOwogICAgICAgIH0KfTsKCmhhc2hfbWFwPExMLExMPiBtYXNraTsKLy9oYXNoX21hcDxMTCxMTCxoYXNoPExMPixlcT4gbWFza2k7CgppbnQgbWFpbigpCnsKICAgICAgICBzY2FuZigiJWQlcyIsICZuLCBhKTsKCiAgICAgICAgcHJlZltuXSA9IDA7CiAgICAgICAgZm9yKGludCBpID0gbi0xOyBpID49IDA7IC0tIGkpCiAgICAgICAgICAgICAgICBwcmVmW2ldID0gcHJlZltpKzFdIHhvciB2KGFbaV0pOwoKICAgICAgICBtYXNraVswXSA9IDE7CgogICAgICAgIGZvcihpbnQgaSA9IG4tMTsgaSA+PSAwOyAtLSBpKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCA2MjsgKysgeCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgTEwgbWFza2EgPSAxTEwgPDwgeDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYobWFza2kuZmluZChwcmVmW2ldIHhvciBtYXNrYSkgIT0gbWFza2kuZW5kKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzICs9IG1hc2tpW3ByZWZbaV0geG9yIG1hc2thXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmKG1hc2tpLmZpbmQocHJlZltpXSkgIT0gbWFza2kuZW5kKCkpCiAgICAgICAgICAgICAgICAgICAgICAgIFJlcyArPSBtYXNraVtwcmVmW2ldXTsKICAgICAgICAgICAgICAgIG1hc2tpW3ByZWZbaV1dICsrOwogICAgICAgIH0KCiAgICAgICAgcHJpbnRmKCIlbGxkXG4iLCBSZXMpOwoKICAgICAgICByZXR1cm4gMDsKfQ==
compilation info
In file included from /usr/include/c++/4.8/backward/hash_map:60:0,
from prog.cpp:2:
/usr/include/c++/4.8/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header which may be removed without further notice at a future date. Please use a non-deprecated interface with equivalent functionality instead. For a listing of replacement headers and interfaces, consult the file backward_warning.h. To disable this warning use -Wno-deprecated. [-Wcpp]
#warning \
^
prog.cpp:29:1: error: ‘hash_map’ does not name a type
hash_map<LL,LL> maski;
^
prog.cpp: In function ‘int main()’:
prog.cpp:40:9: error: ‘maski’ was not declared in this scope
maski[0] = 1;
^
stdout