#include<algorithm> #include<iostream> #include<cstdlib> #include<cstring> #include<cstdio> #include<string> #include<vector> #include<queue> #include<cmath> #include<ctime> #include<map> #include<set> #define MEM(x,y) memset ( x , y , sizeof ( x ) ) #define rep(i,a,b) for (int i = (a) ; i <= (b) ; ++ i) #define per(i,a,b) for (int i = (a) ; i >= (b) ; -- i) #define pii pair < int , int > #define one first #define two second #define rint read<int> #define pb push_back #define db double #define ull unsigned long long #define lowbit(x) ( x & ( - x ) )
template < classT > inlineTread () { T x = 0 , f = 1 ; char ch = getchar () ; while ( ch < '0' || ch > '9' ) { if ( ch == '-' ) f = - 1 ; ch = getchar () ; } while ( ch >= '0' && ch <= '9' ) { x = ( x << 3 ) + ( x << 1 ) + ( ch - 48 ) ; ch = getchar () ; } return f * x ; }
constint N = 1e3 + 100 ;
int n , m , f[N*2] ;
inlineintgetf(int x){ return f[x] == x ? x : f[x] = getf ( f[x] ) ; }
inlinevoidmerge(int x , int y){ x = getf ( x ) ; y = getf ( y ) ; if ( x != y ) f[y] = x ; return ; }
signedmain(int argc , char * argv[]){ n = rint () ; m = rint () ; rep ( i , 1 , n * 2 ) f[i] = i ; char opt[2] ; int u , v ; while ( m -- ) { scanf ("%s" , opt ) ; u = rint () ; v = rint () ; if ( opt[0] == 'E' ) { merge ( u , v + n ) ; merge ( v , u + n ) ; } else merge ( u , v ) ; } rep ( i , 1 , n ) if ( f[i] == i ) ++ f[0] ; printf ("%d\n" , f[0] ) ; #ifndef ONLINE_JUDGE system ("pause") ; #endif return0 ; }