#include <iostream>
#include <string>
#include <vector>
#include <iterator>
#include <algorithm>
using namespace std;

char name[] = {
	'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
	'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
	'u', 'v', 'w', 'x', 'y', 'z', '.'
};

int index(char c){
	if(c == '.') return 26;
	return ((int)c - 97);
}

char change(char c, int i){
	if(c == '.') return '.';
	return name[(index(c) + i) % 26];
}

bool search(vector<string> vs, const string& t, int i){
	for(vector<string>::const_iterator iter = vs.begin();
		iter != vs.end(); iter++)
	{
		int size = (*iter).size();
		string s;
		for(string::const_iterator it = (*iter).begin();
			it != (*iter).end(); it++)
			s.push_back(change((*it),i));
		if((*iter)[size - 1] != '.'){
			if(size == t.size() && equal(s.begin(), s.end(), t.begin()))
				return true;
		} else {
			if(size == t.size() && equal(s.begin(), s.end() - 1, t.begin()))
				return true;
		}
	}
	return false;
}

int main(){
	vector<string> vs;
	string s;
	const string t1("the"), t2("this"), t3("that");
	while(cin >> s)
		vs.push_back(s);
	int i = 0;
	for(; i < 26; i++){
		if(search(vs, t1,i) || search(vs, t2, i) || search(vs, t3, i))
			break;
	}
	for(vector<string>::const_iterator iter = vs.begin(); 
		iter != vs.end(); iter++)
	{
		for(string::const_iterator it = (*iter).begin();
			it != (*iter).end(); it++)
			cout << change(*it, i);
		if(iter == vs.end() - 1)
			cout << endl;
		else cout << " ";
	}
	return 0;
}