General
 
 
# 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
→ Source
//                                ** 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';
}

?
Time: ? ms, memory: ? KB
Verdict: ?
Input
?
Participant's output
?
Jury's answer
?
Checker comment
?
Diagnostics
?
Click to see test details