#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <vector>
#include <string>
#include <array>
#include <queue>
#include <deque>
#include <set>
#include <list>
#include <map>
#include <stack>
#include <utility>
#include <algorithm>
#include <numeric>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cctype>
#include <cstring>
#include <climits>
#include <bitset>
#include <random>
#include <functional>
#include <sstream>
#include <iomanip>

using namespace std;

#define rep(i, n) for(int i=0; i<(n); i++)
#define FOR(i, m, n) for(int i=(m);i<(n);i++)
#define sz(x) ((int)(x).size())
#define all(x) (x).begin(),(x).end()
#define SORT(x) sort((x).begin(),(x).end())
#define REVE(x) reverse((x).begin(),(x).end())
#define mp make_pair
#define pb push_back
#define F first
#define S second


typedef vector<int> VI;
typedef vector<string> VS;
typedef vector<vector<int>> VVI;
typedef pair<int, int> PII;
typedef long long LL;

string convi(string s, int n) {
	string re;
	rep(i, sz(s)) {
		if (islower(s[i])) {
			int a = (int)(s[i]) + n;
			if (a > 122)a -= (a - 122 + 26 - 1) / 26 * 26;
			re += (char)a;
		}
		else {
			re += s[i];
		}
	}
	return re;
}

VS split(string str, char del) {
	VS re;
	string sub;
	for (char c : str) {
		if (c == del) {
			re.pb(sub);
			sub.clear();
		}
		else {
			sub += c;
		}
	}
	re.pb(sub);
	return re;
}

bool check(string s, string t) {
	string s2, t2;
	rep(i, sz(s)) {
		if (s[i] != '.')s2 += s[i];
	}
	rep(i, sz(t)) {
		if (t[i] != '.')t2 += t[i];
	}
	return s2 == t2;
}
int main() {
	string s;
	while (getline(cin, s)) {
		rep(i, 26) {
			string s2 = convi(s, i);
			VS sub = split(s2, ' ');
			VS ch = { "the","this","that" };
			bool flag = false;
			
			rep(j, sz(sub))rep(k, 3) {
				if (check(sub[j],ch[k]))flag = true;
			}

			if (flag) { cout << s2 << endl; break; }
		}
	}
}
/*
A:65
Z:90
a:97
z:122
*/
