#include #include #include #include #include #include #include #include using namespace std; #define For(i,l,r) for(int i=(l);i<=(r);i++) #define Down(i,r,l) for(int i=(r);i>=(l);i--) #define mset(a,x) memset(a,x,sizeof(a)) #define INF 0x7fffffff mapm; int n,l[1001][30],r[1001][30],cnt,Empty[1001]; char s[10005]; void Get(char *s,int n) { int len=strlen(s),i=0; while(i='a'&&s[i]<='z') { s1+=s[i]; i++; } if(m.find(s1)==m.end()) m[s1]=++cnt; int id=m[s1]; while(s[i]==' '||s[i]==',') i++; string s2=""; while(s[i]=='>'||s[i]=='<'||s[i]=='=') { s2+=s[i]; i++; } while(s[i]==' '||s[i]==',') i++; int res=0,f=1; if(s[i]=='-') { f=-1; i++; } while(isdigit(s[i])) { res=res*10+s[i]-'0'; i++; } res*=f; if(s2==">") l[n][id]=max(l[n][id],res+1); else if(s2==">=") l[n][id]=max(l[n][id],res); else if(s2=="<") r[n][id]=min(r[n][id],res-1); else if(s2=="<=") r[n][id]=min(r[n][id],res); else l[n][id]=max(l[n][id],res),r[n][id]=min(r[n][id],res); if(l[n][id]>r[n][id]) { Empty[n]=1; return; } while(s[i]==' '||s[i]==',') i++; } } int work(int n,int m) { For(i,1,cnt) { int L=max(l[n][i],l[m][i]),R=min(r[n][i],r[m][i]); if(L>R) return 0; } return 1; } int main() { m.clear(); scanf("%d",&n); For(i,1,n) For(j,1,30) { l[i][j]=-10000; r[i][j]=10000; } mset(Empty,0); cnt=0; getchar(); For(i,1,n) { gets(s); Get(s,i); if(Empty[i]) { printf("unique\n"); continue; } int f=0; For(j,1,i-1) if(!Empty[j]) { if(work(j,i)) { if(f) printf(" "); else f=1; printf("%d",j); } } if(f==0) printf("unique\n"); else printf("\n"); } return 0; }