#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; const int inf = 0x3f3f3f3f; const int N = 1000 + 10; const int M = 30 + 10; int n; char inch; map id2ID; int idcur; struct Round { int l, r; void Init() { l = -inf; r = inf; } }rounds[N][M], test[M]; void add(int cur, string id, string op, int num) { if(!id2ID.count(id)) id2ID[id] = ++idcur; int idx = id2ID[id]; if(op == "<") { rounds[cur][idx].r = min(rounds[cur][idx].r, num-1); } else if(op == "<=") { rounds[cur][idx].r = min(rounds[cur][idx].r, num); } else if(op == ">") { rounds[cur][idx].l = max(rounds[cur][idx].l, num+1); } else if(op == ">=") { rounds[cur][idx].l = max(rounds[cur][idx].l, num); } else if(op == "==") { rounds[cur][idx].r = min(rounds[cur][idx].r, num); rounds[cur][idx].l = max(rounds[cur][idx].l, num); } } void init() { for(int i = 1; i <= n; ++i) { for(int j = 0; j < M; ++j) { rounds[i][j].Init(); } } id2ID.clear(); idcur = 0; } void input() { inch = getchar(); while(inch != '\n') inch = getchar(); for(int i = 1; i <= n; ++i) { inch = getchar(); while(inch != '\n') { while(isspace(inch)) inch = getchar(); string id; while(!isspace(inch) && !(inch == '<' || inch == '=' || inch == '>')) { id += inch; inch = getchar(); if(inch == EOF) return; } while(isspace(inch)) inch = getchar(); string op; while(inch == '<' || inch == '=' || inch == '>') { op += inch; inch = getchar(); } while(isspace(inch)) inch = getchar(); int num = 0; while(isdigit(inch)) { num = num * 10 + inch - '0'; inch = getchar(); } add(i, id, op, num); while(isspace(inch) && inch != '\n') inch = getchar(); if(inch == ',') inch = getchar(); } } } bool OK(int i, int j) { for(int k = 1; k <= idcur; ++k) test[k] = rounds[i][k]; for(int k = 1; k <= idcur; ++k) { test[k].l = max(test[k].l, rounds[j][k].l); test[k].r = min(test[k].r, rounds[j][k].r); if(test[k].l > test[k].r) return false; } return true; } vector ans; void solve() { for(int i = 1; i <= n; ++i) { ans.clear(); for(int j = 1; j < i; ++j) { if(OK(i, j)) ans.push_back(j); } if(ans.size() == 0) puts("unique"); else { for(int k = 0; k < ans.size(); ++k) { if(k) printf(" "); printf("%d", ans[k]); } printf("\n"); } } } int main() { #ifdef LOCAL freopen("in", "r", stdin); #endif while(~scanf("%d", &n)) { init(); input(); solve(); } return 0; }