#include #include int main() { // Načtení vstupu int N; scanf("%d\n", &N); char puvodni[N+1]; char zakodovana[N+1]; scanf("%s\n%s", puvodni, zakodovana); // Úvodní inicializace abecedy int abeceda[26]; bool pouzito[26]; for (int i = 0; i < 26; i++) { abeceda[i] = -1; pouzito[i] = false; } for (int i = 0; i < N; i++) { if (abeceda[puvodni[i] - 'A'] == -1) { // Zatím písmeno bez přiřazení if (pouzito[zakodovana[i] - 'A']) { // Odkazované písmeno je už přiřazené jinému písmenu z abecedy printf("NE\n"); return 0; } else { // Přiřadíme písmeno danému písmenu z abecedy abeceda[puvodni[i] - 'A'] = zakodovana[i]; pouzito[zakodovana[i] - 'A'] = true; } } else { // Toto písmeno abecedy již má přiřazené své písmeno, zkontrolujeme ho jestli souhlasí if (abeceda[puvodni[i] - 'A'] != zakodovana[i]) { printf("NE\n"); return 0; } } } // Zpráva je prošlá a zkontrolovaná, zbývá doplnit nepoužitá písmena do abecedy int i = 0; int j = 0; while (i < 26) { if (abeceda[i] != -1) i++; else if (pouzito[j]) j++; else { // Stojíme na písmenu abecedy bez přiřazení a j nám ukazuje na první doposud nepoužité písmeno abeceda[i] = j + 'A'; pouzito[j] = true; } } // Vypsání abecedy printf("ANO\n"); for (int i = 0; i < 26; i++) printf("%c", abeceda[i]); printf("\n"); return 0; }