sub1 AC,sub2 WA,sub3 TLE
#include<bits/stdc++.h>
#define int long long
#define Maxn 2*300001
using namespace std;
vector<int> a[Maxn];
std::unordered_map<int,int>mymap;
std::unordered_map<int,int>Mymap;
int tot=0;
void read(int &x){
char ch=getchar();
int f=1;
x=0;
while(ch<'0'||ch>'9'){
if(ch=='-'){
f=-f;
}
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=(x<<1)+(x<<3)+ch-48;
ch=getchar();
}
x*=f;
}
void out(int x){
if(x>=10){
out(x/10);
}
putchar(x%10+48);
}
void write(int x){
out(x);
putchar('\n');
}
int sum(int x,int y){
return (Mymap[x]/100000000+1)*(Mymap[y]%100000000)-(Mymap[y]/100000000+1)*(Mymap[x]%100000000);
}
int f[Maxn];
int find(int x){
// printf("find:%d\n",x);
if(f[x]!=x)return f[x]=find(f[x]);
return x;
}
void hb(int x,int y){
// printf("hb:%d %d\n",x,y);
f[find(x)]=find(y);
}
int w[Maxn];
void dfs(int p,int fa){
w[p]=w[fa]+sum(p,fa);
for(auto it:a[p]){
if(it!=fa){
dfs(it,p);
}
}
}
signed main(){
int n;
read(n);
for(int i=1;i<=n;i++){
int x,y;
char ch;
read(x);
read(y);
cin>>ch;
int u=x*1e8+y,v;
if(ch=='x')
v=(x+1)*1e8+y;
else
v=x*1e8+y+1;
if(!mymap.count(u)){
mymap[u]=++tot;
Mymap[tot]=u;
f[tot]=tot;
}
if(!mymap.count(v)){
mymap[v]=++tot;
Mymap[tot]=v;
f[tot]=tot;
}
int uu,vv;
uu=mymap[u];
vv=mymap[v];
if(find(uu)!=find(vv)){
hb(uu,vv);
a[vv].push_back(uu);
a[uu].push_back(vv);
dfs(uu,vv);
write(0);
}
else{
write(abs(w[uu]-w[vv]-sum(uu,vv))/2);
}
}
return 0;
}