#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll N=1e6+90,M=(1<<30)-1;
ll n,fail[N],w[N],ans,ansn;
char c[N];
ll f[N][20],dif[N];
void add(int p){
f[p][0]=w[p];
for(int i=1;(1<<i)<=p;i++) f[p][i]=min(f[p][i-1],f[p-(1<<i-1)][i-1]);
}
ll qmin(ll l,ll r){
ll k=log2(r-l+1);
return min(f[r][k],f[l+(1<<k)-1][k]);
}
map<ll,ll>mp;
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n;
int j=0;
memset(f,127,sizeof f);
for(int i=1;i<=n;i++){
cin>>c[i]>>w[i];
c[i]=char((c[i]-'a'+ans)%26+'a');
w[i]^=(ans&M);
add(i);
ll kp=qmin(1,i);
ans+=kp;
if(i==1){
cout<<ans<<"\n";
continue;
}
while(j&&c[j+1]!=c[i]) j=fail[j];
if(c[j+1]==c[i]) j++;
fail[i]=j;
if(c[i]==c[fail[i-1]+1]) dif[i-1]=dif[fail[i-1]];
else dif[i-1]=fail[i-1];
int p=dif[i-1];
while(p){
ll sum=qmin(i-p,i-1);
ansn-=sum;
mp[sum]--;
if(!mp[sum]) mp.erase(sum);
p=dif[p];
}
if(c[1]==c[i]) ansn+=w[i],mp[w[i]]++;
map<ll,ll>::iterator it,pl;
int ps=0;
bool fl=1;
for(it=mp.upper_bound(w[i]);it!=mp.end();it++){
if(!fl) mp.erase(pl);
ansn-=(ll)(it->first-w[i])*it->second;
ps+=it->second;
pl=it;
fl=0;
}
if(!fl) mp.erase(pl);
mp[w[i]]+=ps;
ans+=ansn;
cout<<ans<<"\n";
}
return 0;
}