/* vzorovy sifrovaci program */

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

#define NMAX 101
#define KSIZE 27

typedef struct {
    char in;
    char *out;
} r;

r key[KSIZE] = {
    {' ', "P>\\{?lxE9.8#"},
    {'A', "<G)~cI"},
    {'B', "wh"},
    {'C', "Q!7"},
    {'D', "}\'1"},
    {'E', ",DZ;RKsJ"},
    {'F', "*X"},
    {'G', "j5"},
    {'H', "COo="},
    {'I', "/e0|3"},
    {'J', "r"},
    {'K', "]t"},
    {'L', "Nk:"},
    {'M', "fY"},
    {'N', "4[(gm"},
    {'O', "`v+-&"},
    {'P', "u%"},
    {'Q', "S"},
    {'R', "FiqA"},
    {'S', "M6n_U"},
    {'T', "2a\"WH^"},
    {'U', "@db"},
    {'V', "zy"},
    {'W', "pT"},
    {'X', "B"},
    {'Y', "VL"},
    {'Z', "$"}
};

char S(char c, int i) {
    int j;
    char *out = "\n";
    for (j = 0; j < KSIZE; j++) {
        if (c == key[j].in) {
            out = key[j].out;
            break;
        }
    }
    return out[i % strlen(out)];
}

void E(char *O, char *I) {
    int i;
    for (i = 0; I[i] != 0; i++) {
        O[i] = S(I[i], rand());
    }
    O[i] = 0;
}

int V(const char *s) {
    if (s == NULL) {
        return 1;
    }

    for (int i = 0; s[i] != 0; i++) {
        char c = s[i];
        if (!(((c >= 'A') && (c <= 'Z')) || (c == ' '))) {
            return 0;
        }
    }
    return 1;
}

int main(void) {
    srand(time(NULL));


    char i[NMAX], o[NMAX];

    if (i != fgets(i, NMAX, stdin)) {
        fputs("Error: Failed reading input\n", stderr);
        return 1;
    };
    i[strcspn(i, "\n")] = 0;
    if (!V(i)) {
        fputs("Error: Input must match [A-Z ]*\n", stderr);
        return 2;
    };
    E(o, i);

    puts(o);

    return 0;
}
