# |
Author |
Problem |
Lang |
Verdict |
Time |
Memory |
Sent |
Judged |
|
25260675 |
Contestant:
saliii |
782D
- 14
|
C++14 (GCC 6-32)
|
Accepted
|
15 ms
|
2384 KB
|
2017-03-05 17:35:04 |
2017-03-05 18:16:37 |
|
// ** ALLAH **
// who is Hussain? -> whoishussain.org
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define fi first
#define se second
#define FAIL return cout << "NO",0;
typedef long long ll;
typedef pair<int,int> pii;
const int mod=1000000007;
inline int in(){ int x; scanf("%d",&x); return x; }
const int N = 1001, maxa = 27*27*27;
int ans[maxa], inp[N][2];
vector<int> cur[maxa];
int to(string ccc){
return (ccc[0]-'A')*26*26 + (ccc[1]-'A')*26 + (ccc[2]-'A');
}
string get(int x){
string s = "";
s += 'A'+x%26;
s += (x/26)%26+'A';
s += (x/26/26)%26+'A';
reverse(s.begin(),s.end());
return s;
}
vector<int> x;
string outp[N];
int32_t main(){
int n;
cin >> n;
for(int i = 0;i < n;i ++){
string s, c;
cin >> s >> c;
string ss = "";
ss+=s[0];
ss+=s[1];
ss+=c[0];
cur[to(s)].push_back(i+1);
x.push_back(to(s));
inp[i][0] = to(s), inp[i][1] = to(ss);
}
sort(x.begin(),x.end());
x.resize(unique(x.begin(),x.end())-x.begin());
for(int i = 0;i < (int)x.size(); i++){
int c = x[i];
if( cur[c].size() > 1 )
for( auto ss : cur[c] )
if( ans[inp[ss-1][1]] != 0 ) FAIL
else ans[inp[ss-1][1]] = ss;
}
bool ok = true;
while( ok ){
ok = false;
for(int i = 0;i < n;i ++){
if( ans[inp[i][0]] != 0 && ans[inp[i][1]] != i+1 ){
if( ans[inp[i][1]] != 0 && ans[inp[i][1]] != i+1 ) FAIL
else ok=true; ans[inp[i][1]] = i+1;
}
}
}
for(int i = 0;i < n;i ++){
if( (ans[inp[i][0]] != i+1) && (ans[inp[i][1]] != i+1) )
ans[inp[i][0]] = i+1;
}
cout << "YES" << endl;
for(int i = 0;i < maxa; i++)
if( ans[i] ) outp[ans[i]-1] = get(i);
for(int i= 0;i < n;i ++) cout << outp[i] << '\n';
}
Click to see test details