#include<iostream>
#include<sstream>
#include<fstream>
#include<cstdio>
#include<vector>
#include<list>
#include<stack>
#include<queue>
#include<deque>
#include<string>
#include<map>
#include<set>
#include<algorithm>
#include<cmath>
#include<cstdlib>
using namespace std;

string resolve(string org,int ch){
	string ret = "";
	for(int x=0;x<org.size();++x){
		if(org[x]==' ' || org[x]=='.'){
			ret += org[x];
		}else if(org[x]+ch<'a'){
			ret += 'z' - ('a'-(org[x]+ch)-1);
		}else if(org[x]+ch>'z'){
			ret += 'a' +(org[x]+ch-'z'-1);
		}else{
			ret += org[x]+ch;
		}	
	}
	return ret;
}

vector<string> tokens(string line){
	vector<string> ret;
	int b=0;
	string tmp= "";
	while(line[b]!=0){
		if(line[b]==' '){	
			if(tmp.size()>0){
				ret.push_back(tmp);
			}
			tmp = "";
		}else{
			tmp += line[b];
		}
		++b;
	}
	if(tmp.size()>0){
		ret.push_back(tmp);
	}
	return ret;
}

string solve(string line){
	vector<string> tok = tokens(line);
	int ch = 0;
	for(int x=0;x<tok.size();++x){
		if(tok[x].size()==3 || tok[x].size()==4){
			int tmp = 't'-tok[x][0];
			if(tmp>0){
				tmp = -7-tok[x][0]+'a';
			}
			string sol = resolve(tok[x],tmp);
			if(sol=="the" || sol =="that" || sol=="this"){ch = tmp;break;}
		}
	}
	return resolve(line,ch);
}

int main(){
	string line;
	while(getline(cin,line)){
		if(line=="")break;
		cout<<solve(line)<<endl;
	}
	return 0;
}