#include #include #include "testlib.h" using namespace std; #define rep(i,n) for (int i = 0; i < (n); ++i) #define modulo 998244353 #define mod(mod_x) ((((long long)mod_x+modulo))%modulo) #define Inf 1000000000 void NG(){ cout<<"No"< topological_sort(vector> E){ int N = E.size(); vector d(N,0); rep(i,N){ rep(j,E[i].size()){ d[E[i][j]]++; } } queue Q; rep(i,N){ if(d[i]==0)Q.push(i); } vector ret; while(Q.size()>0){ int u = Q.front(); Q.pop(); ret.push_back(u); rep(i,E[u].size()){ int v = E[u][i]; d[v]--; if(d[v]==0)Q.push(v); } } if(ret.size()!=N)ret.resize(0); return ret; } int main(){ //for test /* int N; cin>>N; vector C(N),X(N); vector Y(N); rep(i,N)cin>>C[i]>>X[i]>>Y[i]; */ //for validation registerValidation(); int N; N = inf.readInt(1,200000); inf.readEoln(); vector C(N),X(N); vector Y(N); rep(i,N){ C[i] = inf.readChar(); inf.readSpace(); X[i] = inf.readChar(); inf.readSpace(); Y[i] = inf.readInt(0,N-1); inf.readEoln(); assert(C[i]=='R'||C[i]=='B'); assert(X[i]=='R'||X[i]=='B'); } inf.readEof(); deque B,R; rep(i,N){ if(C[i]=='B')B.push_back(-1); else R.push_back(-1); } rep(i,N){ if(C[i]==X[i]){ int t = Y[i]; if(C[i]=='R')swap(B,R); if(t>=B.size())NG(); if(B[t]!=-1)NG(); B[t] = i; if(C[i]=='R')swap(B,R); } } vector> pB,pR; rep(i,N){ if(C[i]==X[i])continue; if(C[i]=='B')pB.emplace_back(Y[i],i); else pR.emplace_back(Y[i],i); } sort(pB.begin(),pB.end()); sort(pR.begin(),pR.end()); int now = 0; rep(i,pB.size()){ while(B[now]!=-1)now++; B[now] = pB[i].second; } now = 0; rep(i,pR.size()){ while(R[now]!=-1)now++; R[now] = pR[i].second; } int n = B.size(),m = R.size(); vector> E(N,vector()); rep(i,n-1){ E[i].push_back(i+1); } rep(i,m-1){ E[n+i].push_back(n+i+1); } rep(i,n){ int ind = B[i]; if(C[ind]==X[ind])continue; if(Y[ind]>m)NG(); if(Y[ind]!=0)E[n+Y[ind]-1].push_back(i); if(Y[ind]!=m)E[i].push_back(n+Y[ind]); } rep(i,m){ int ind = R[i]; if(C[ind]==X[ind])continue; if(Y[ind]>n)NG(); if(Y[ind]!=0)E[Y[ind]-1].push_back(n+i); if(Y[ind]!=n)E[n+i].push_back(Y[ind]); } vector sorted = topological_sort(E); if(sorted.size()==0)NG(); vector ans(N); rep(i,sorted.size()){ if(sorted[i]