//并查集+拓扑排序,‘=’ 用并查集处理
#include<iostream>
#include<queue>
#include<vector>
using namespace std;
vector<int>next[10005]; //相当于邻接表
int set[10005]; //并查集数组
int in[10005]; //记录入度
int A[20005],B[20005];
char oper[20005];
int n,m,sum;
int find(int x)
{
return set[x]==x?x:find(set[x]);
}
int merge(int x,int y)
{
int a=find(x);
int b=find(y);
if(a==b) return 0;
set[b]=a;
return 1;
}
void topo()
{
int uncertain=0;
queue<int>Q;
for(int i=0;i<n;i++)
if(in[i]==0 && find(i)==i)
Q.push(i);
while(!Q.empty()){
if(Q.size()>1) uncertain=1; //容器中有多于一个的元素,就无法排序
int t=Q.front();
Q.pop();
sum--;
for(int i=0;i<next[t].size();i++)
if(--in[next[t][i]]==0)
Q.push(next[t][i]);
}
if(sum>0) puts("CONFLICT"); //还有元素未排序,证明存在环
else if(uncertain) puts("UNCERTAIN");
else puts("OK");
}
int main(void)
{
while(scanf("%d%d",&n,&m)!=EOF)
{
sum=n;
for(int i=0;i<n;i++){
set[i]=i;
in[i]=0;
next[i].clear();
}
for(int i=0;i<m;i++){
scanf("%d %c %d",&A[i],&oper[i],&B[i]);
if(oper[i]=='=')
if(merge(A[i],B[i])) sum--;
}
for(int i=0;i<m;i++){
if(oper[i]=='=') continue;
int a=find(A[i]);
int b=find(B[i]);
if(oper[i]=='>'){
next[a].push_back(b); //插入元素
in[b]++;
}else{
next[b].push_back(a);
in[a]++;
}
}
topo();
}
return 0;
}