#include <cstdio>
#include <string>
#include <vector>
#include <map>
using namespace std;
static map<char, int> create_map() {
    map<char, int> m;
    string base = "abcdefghijklmnopqrstuvwxyz";
    for (int i = 0; i < 26; i++) m.insert({base[i], i});
    return m;
}
static map<char, int> m = create_map();
static string base = "abcdefghijklmnopqrstuvwxyz";
string str;
static int t1[4] = {0, 14, 7, 0}; //that
static int t2[4] = {0, 14, 15, 25}; //this
static int t3[3] = {0, 14, 11}; //the
int cdiff;

int main(void){

    char chs[81];
    while(fgets(chs, 81, stdin) != 0){
        str = chs;
        cdiff = 27;
        int sidx;
        for (int i = 0; i < str.size()-2; i++) {
            if (cdiff != 27) break;
            sidx = m[str[i]];
            //if character is a space or a point or distance between current and next character is not that we expected...
            if (str[i+1] == '.' || str[i+1] == ' ' || base[(sidx+t3[1])%26] != str[i+1]) continue;
            if (str[i+2] != '.' && str[i+2] != ' ' && base[(sidx+t3[2])%26] == str[i+2]) { cdiff = sidx - m['t']; break; }
            if (i < str.size()-3) {
                if (str[i+2] == '.' || str[i+3] == '.' || str[i+2] == ' ' || str[i+3] == ' ') continue;
                if (base[(sidx+t1[2])%26] == str[i+2] && base[(sidx+t1[3])%26] == str[i+3]) { cdiff = sidx-m['t']; break; }
                if (base[(sidx+t2[2])%26] == str[i+2] && base[(sidx+t2[3])%26] == str[i+3]) { cdiff = sidx-m['t']; break; }
            }
        }
        map<char, char> m2;
        for (int i = 19; i < 45; i++) m2.insert({base[(cdiff+i)%26], base[i%26]});
        m2.insert({'.', '.'}); m2.insert({' ', ' '});
        string str2 = "";
        for (int i = 0; i < str.size(); i++) {
            str2 += m2[str[i]];
        }
        printf("%s\n", str2.c_str());
    }


    return 0;
}

