#pragma warning(disable:4996)
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <string.h>
using namespace std;
#define maxn 20005
int n;
char tmp[105];
vector<int>v;
int p[maxn],pre[maxn],dp[maxn];
int findpar(int x)
{
if(x != p[x])
{
int pp = p[x];
p[x] = findpar(p[x]);
dp[x] ^= dp[pp];
}
return p[x];
}
bool ok()
{
if (v.empty())return 1;
sort(v.begin(),v.end());
int pre = v[0],num = 1;
for (unsigned i = 1;i<v.size();i++)
{
if(v[i] != pre)
{
if((num & 1) != 0)return 0;
else num = 1,pre = v[i];
}
else num++;
}
if((num & 1) == 0)return 1;
else return 0;
}
bool merge(int x,int y,int res)
{
int c = findpar(x);
int d = findpar(y);
if(c != d)
{
if(c == n)swap(c,d),swap(x,y);
p[c] = d;
dp[c] = dp[x] ^ res ^ dp[y];
}
else
{
if((dp[x] ^ dp[y]) != res)
return 0;
}
return 1;
}
int main()
{
int q,cas=0;
while (cin>>n>>q && n+q)
{
printf("Case %d:\n",++cas);
for (int i = 0;i<=n;i++)
p[i] = i,pre[i] = i;
memset(dp,0,sizeof dp);
char s[5];
int err = 0,fact=0;
for (int i=0;i<q;i++)
{
scanf("%s",s);
int x,y,res;
if(s[0] == 'I')
{
fact++;
gets(tmp);
if(err) continue;
if(sscanf(tmp,"%d%d%d",&x,&y,&res)==2)
{
res = y;
y = n;
}
if(!merge(x,y,res))
{
err = 1;
printf("The first %d facts are conflicting.\n",fact);
}
}
else
{
int m,tmp;
scanf("%d",&m);
int ans = 0;
v.clear();
for (int i = 0;i<m;i++)
{
scanf("%d",&tmp);
if(err)continue;
int pp = findpar(tmp);
if(pp != n)
v.push_back(pp);
ans ^= dp[tmp];
}
if(err)continue;
if(ok())
printf("%d\n",ans);
else
puts("I don't know.");
}
}
puts("");
}
return 0;
}