#include <iostream>
#include <string>
#include <algorithm>
#include <cstdlib>
#include <vector>
#include <sstream>      // std::ostringstream
std::vector<std::string> split(const std::string &str, char sep)
{
	std::vector<std::string> v;
	std::stringstream ss(str);
	std::string buffer;
	while (std::getline(ss, buffer, sep)) {
		v.push_back(buffer);
	}
	return v;
}
using namespace std;
int main() {
	string str;
	string w[3] = { "the","this",  "that" };
	getline(cin, str);

	vector<string> v = split(str, ' ');

	int key;
	bool f = false;

	v[v.size() - 1].pop_back();

	for (int i = 0; i < v.size();i++) {
		for (int j = 1; j < 26;j++) {
			string temp;
			for (int k = 0; k < v[i].size();k++) {
				temp += (v[i][k] - 'a' + j) % 26 + 'a';
			}
			for (int k = 0; k < 3;k++) {
				if (temp == w[k]) {
					f = true;
					key = j;
					break;
				}
			}
			if (f)break;
		}
		if (f)break;
	}

	for (int i = 0; i < v.size();i++) {
			for (int k = 0; k < v[i].size();k++) {
				cout << char((v[i][k] - 'a' + key) % 26 + 'a');
			}
			if (i == v.size() - 1) {
				cout << ".";
			}
			else {
				cout << " ";
			}
	}
	cout << endl;
}