#include <iostream>
using namespace std;
#define MAX 2001
int g_nFriend[MAX] = {0};
int g_nEnemy[MAX] = {0};
void InitData(const int& nPeople);
int CalcGroup(const int& nPeople, int nMsg);
void Comb(int x, int y);
int FindRoot(const int& x);
int main()
{
int nPeople = 0, nMsg = 0;
cin >>nPeople >>nMsg;
InitData(nPeople);
cout <<CalcGroup(nPeople, nMsg);
return 0;
}
void InitData(const int& nPeople)
{
for (int i = 0; i <= nPeople; ++i)
{
g_nFriend[i] = g_nEnemy[i] = i;
}
}
int CalcGroup(const int& nPeople, int nMsg)
{
char nRela = 0;
int x = 0, y = 0;
while (nMsg--)
{
cin >>nRela >>x >>y;
if (nRela == 'F')
{
Comb(x, y);
}
else
{
if (g_nEnemy[x] == x)
{
g_nEnemy[x] = y;
}
else
{
Comb(g_nEnemy[x], y);
}
if (g_nEnemy[y] == y)
{
g_nEnemy[y] = x;
}
else
{
Comb(g_nEnemy[y], x);
}
}
}
int nGroup = 0;
for (int i = 1; i <= nPeople; ++i)
{
if (g_nFriend[i] == i) ++nGroup;
}
return nGroup;
}
void Comb(int x, int y)
{
x = FindRoot(x);
y = FindRoot(y);
g_nFriend[x] = y;
}
int FindRoot(const int& x)
{
if (g_nFriend[x] != x)
{
g_nFriend[x] = FindRoot(g_nFriend[x]);
}
return g_nFriend[x];
}
/**************************************************************
Problem: 2243
User: admin
Language: C++
Result: Accepted
Time:61 ms
Memory:2088 kb
****************************************************************/