/*题目大意,就是输入的如果为M,那就合并两个集合,否则将此点分离出去,问一共有多少个集合*/
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
const int maxn=2000012;
int n,m,fa[maxn],ans,idx[maxn],vis[maxn];
char op[2];
int find(int x)//非递归
{
int r,t,i;
r=x;
while(r!=fa[r])
r=fa[r];
i=x;
while(i!=r)
{
t=fa[i];
fa[i]=r;
i=t;
}
return r;
}
void Union(int u,int v,int fu,int fv)
{
if(fu>fv)swap(fu,fv);
fa[fv]=fu;
}
int main()
{
int u,v,i,j,cas=1,len;
while(~scanf("%d%d",&n,&m),(n||m))
{
for(ans=0,i=0; i<n; i++)
{
fa[i]=i;
idx[i]=i;
}
len=n;
for(i=1; i<=m; i++)
{
scanf("%s",&op);
if(op[0]=='M')
{
scanf("%d%d",&u,&v);
int x=find(idx[u]),y=find(idx[v]);
if(x!=y)
{
Union(u,v,x,y);
}
}
else
{
scanf("%d",&u);
fa[n]=n;
idx[u]=n++;
}
}
memset(vis,0,sizeof(vis));
for(i=0;i<len;i++)
{
int x=find(idx[i]);
if(!vis[x])
{
vis[x]=1;
ans++;
}
}
printf("Case #%d: %d\n",cas++,ans);
}
return 0;
}