##为什么第一个lower bound要用a[i]-1,我不明白##0.0 ##谢谢
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
const int N =10010;
struct Node{
int l;
int r;
int p;
};
int fa[N], ra[N];
long long x[N], y[N], h[N];
char ops[9];
void init(int n){
for(int i=1;i<=n;i++){
fa[i] = i;
ra[i] = 0;
}
}
int find(int x){
int fx, t, y, s;
s = 0;
fx = x;
while(fa[fx] != fx){
s += ra[fx];
fx = fa[fx];
}
while(fa[x] != fx){
t = fa[x];
fa[x] = fx;
y = ra[x];
ra[x] = s % 2;
s -= y;
x = t;
}
return fx;
}
void merge(int x, int y, int r){
int fx, fy;
fx = find(x);
fy = find(y);
fa[fx] = fy;
ra[fx] = (ra[x] + ra[y] + r) % 2;
}
Node a[N];
int main(){
int n, m, T, k, len, fx, fy, i, fz, z;
scanf("%d%d", &n, &m);
T = 0;
k =0;
for(int i=1;i<=m;i++){
scanf("%lld%lld%s", &a[i].l, &a[i].r, ops);
if(ops[0] == 'e'){
a[i].p = 0;
}else{
a[i].p = 1;
}
k++;
h[k] = a[i].l;
k++;
h[k] = a[i].r;
}
sort(h+1, h+k+1);
len = unique(h+1, h+k+1) - (h+1);
init(2*m);
for(int i=1;i<=m;i++){
a[i].l = lower_bound(h+1, h+len+1, a[i].l-1) - h;
a[i].r = lower_bound(h+1, h+len+1, a[i].r) - h;
T++;
fx = find(a[i].l);
fy = find(a[i].r);
if(fx != fy){
merge(a[i].l, a[i].r, a[i].p);
}else{
z = (ra[a[i].l] + ra[a[i].r]) % 2;
if(z != a[i].p){
T = T - 1;
break;
}
}
}
printf("%d", T);
return 0;
} ```