/*
拓扑以前没用过,现学了下,很简单;邻接表忘了怎么用。。不想用带指针的,就重学了下非指针的邻接表
*/
#include <stdio.h>
#include <iostream>
#include <queue>
#include <string.h>
using namespace std;
struct node{
int to,next;
}e[20001];
int head[10001],tt,f[10001],g[10001],n,m,sum;
int find(int x)
{
if(f[x]!=x)
f[x]=find(f[x]);
return f[x];
}
int judge(int a,int b) //用并查集判断是否已经相等,没相等就合并,计数的sum减1;
{
int aa,bb;
aa=find(a);
bb=find(b);
if(aa==bb)
return 0;
f[aa]=bb;
return 1;
}
void add(int x,int y) //邻接表添加,x>y;
{
e[tt].to=y;
g[y]++; //记录入度数
e[tt].next=head[x];
head[x]=tt++;
}
void sort() //拓扑排序
{
int flag=0,i,t=0;
queue<int>q;
for(i=0;i<n;i++)
if(g[i]==0&&find(i)==i)
{
q.push(i);
t++; //记录队列中的元素数量
}
while(!q.empty())
{
if(t>1) //数量超过1,说明有重复
flag=1;
int u=q.front();
q.pop();
t--;
sum--;
for(i=head[u];i!=-1;i=e[i].next)
{
int v=e[i].to;
g[v]--;
if(g[v]==0)
{
q.push(v);
t++;
}
}
}
if(sum>0) //sum>0说明,剩下sum个入度都大于0的点,即出现了环
cout<<"CONFLICT"<<endl;
else if(flag==1)
cout<<"UNCERTAIN"<<endl;
else
cout<<"OK"<<endl;
}
int main()
{
while(cin>>n>>m)
{
int i,j,k,y[20001],x[20001];
char ch[20001];
sum=n,tt=0;
memset(g,0,sizeof(g));
for(i=0;i<=n;i++)
f[i]=i;
memset(head,-1,sizeof(head));
for(i=0;i<m;i++)
{
cin>>x[i]>>ch[i]>>y[i]; //为了防止输入字符出问题,就用了cin
if(ch[i]=='=')
if(judge(x[i],y[i]))
sum--;
}
for(i=0;i<m;i++)
{
if(ch[i]=='=')
continue;
int aa,bb;
aa=find(x[i]);
bb=find(y[i]);
if(ch[i]=='>') //从大到小排
add(aa,bb);
else
add(bb,aa);
}
sort();
}
return 0;
}