Go: package main

import (
	"bufio"
	"fmt"
	"os"
	"strings"
)

var scanner = bufio.NewScanner(os.Stdin)

func main() {
	for scanner.Scan() {
		var result string
		line := scanner.Text()
		key := make(map[string]string)

		var i int32
		for ; i < 52; i++ {
			makeKey(key, i)
			result = decode(key, line)

			if strings.Contains(result, "the") {
				break
			} else if strings.Contains(result, "this") {
				break
			} else if strings.Contains(result, "that") {
				break
			}
		}

		fmt.Println(result)
	}
}

func makeKey(key map[string]string, shift int32) {
	for i := 'a'; i <= 'z'; i++ {
		cipher := (i + shift)
		if cipher > 'z' {
			cipher = cipher%'z' + 'a' - 1
		} else if cipher < 'a' {
			cipher = cipher + ('z' - 'a') + 1
		}
		key[string(i)] = string(cipher)
	}
}

func decode(key map[string]string, cipher string) string {
	var result string
	for _, v := range cipher {
		if key[string(v)] != "" {
			result += key[string(v)]
		} else {
			result += string(v)
		}
	}
	return result
}

C++: #include <iostream>
using namespace std;
#include <string>

bool dec(string str, string array[]) {
  for (int i = 0; i < 3; i++) {
    if (str.find(array[i], 0) != string::npos) return false;
  }
  return true;
}

int main() {
  string array[3] = {"the", "this", "that"};
  while (1) {
    string str;
    getline(cin, str);
    while (dec(str, array)) {
      for (int i = 0; i < (int)str.size(); i++) {
	if ('a' <= str[i] && str[i] <= 'z') {
	  if (str[i] == 'z') str[i] = 'a';
	  else str[i]++;
	}
      }      
    }
    cout << str << endl;
  }
  return 0;
}

C++: #include<iostream>
#include<string>

using namespace std;

int main(void){
	string str;

	while(getline(cin,str)){
		for(int j=0;j<26;j++){
			for(int i=0;i<str.size();i++){
				if(str[i]>='a'||str[i]<='z'){
					if(str[i]=='z'){
						str[i]='a';
					}else{
						str[i]+1;
					}
				}
			}
			if(str.find("the")!=string::npos||str.find("this")!=string::npos||str.find("that")!=string::npos){
				cout<<str<<endl;
			}
		}
	}
	return 0;
}

C++: #include<iostream>
#include<string>
int main()
{
    std::string s;
    while (std::getline(std::cin, s)) {
        while (s.find("the") == s.npos && s.find("this") == s.npos && s.find("that") == s.npos) {
            for (size_t i = 0; i < s.size(); i ++) {
                if (s[i] >= 'a' && s[i] <= 'y')
                    s[i] ++;
                else if (s[i] == 'z')
                    s[i] = 'a';
            }
        }
        std::cout << s << std::endl;
    }
    return 0;
}

C++: #include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;



int main(int argc, const char * argv[])
{
    string word;
    while (getline(cin, word)) {
        int cnt = 0;
        for (char tmp2 = word[0]; tmp2 < 'z'; tmp2++) {
            if (tmp2 == 't') {
                break;
            }
            cnt++;
        }
        cnt = 0;
        for (char tmp2 = word[0]; tmp2 > 'a'; tmp2--) {
            if (tmp2 == 't') {
                break;
            }
            cnt--;
        }
        for (int i = 0; i < word.size(); i++) {
            if (word[i] == '.') {
                
            }
            else if (word[i] != ' ') {
                word[i] += cnt;
            }
        }
        cout << word << endl;
    }

    
    return 0;
}

C++: #include<cstdio>
#include<iostream>
#include<string>

using namespace std;

int main(){
	string str;
	getline(cin,str);
	for(int num=0;num<26;num++){
		for(int i=0;i<str.length();i++){
			if(97<=str[i] && str[i]<=122){
				str[i]+=1;
				if(str[i]>122) str[i] -=26;
			}
		}
		string::size_type index1 = str.find("the");
		string::size_type index2 = str.find("this");
		string::size_type index3 = str.find("that");
		
		if( index1 == string::npos && index2 == string::npos &&
		    index3 == string::npos){
			continue;
		}else{
			cout << str <<endl;
			break;
		}
	}
	return 0;

}

C++: #include<iostream>
#include<vector>
using namespace std;
bool isAlpha(char ch){
  return (('A'<=ch&&ch<='Z')||('a'<=ch&&ch<='z'));
}
string change(string str){
  for(int i=0;i<(int)str.size();i++){
    if(isAlpha(str[i])){
      if(str[i]=='z'||str[i]=='Z')str[i]-=25;
      else str[i]++;
    }
  }
  return str;
}
int main(){
  int ans=-1;
  string str;
  vector <string> tab;
  while(cin>>str){
    tab.push_back(str);
    for(int i=0;i<26&&ans==-1;i++){
      str=change(str);
      if(str=="the"||str=="this"||str=="that"){
	ans=i;
      }
    }
  }
  //cout<<ans<<endl;
  for(int i=0;i<(int)tab.size();i++){
    if(i)cout<<' ';
    str=tab[i];
    for(int j=0;j<=ans;j++)str=change(str);
    cout<<str;
  }
  cout<<endl;
  return 0;
}

C++: #include<bits/stdc++.h>
using namespace std;
int main(){
  string str[80];
  vector<int> num;
  //while(cin>>str[i]){
  for(int i=0;i<10;i++){
    cin>>str[i];
    if(str[i].size()==4||str[i].size()==3)
      num.push_back((str[i].size()*100)+i);
  }
  int flag=0,zure=0;
  for(int i=0;i<num.size();i++){
    if(num[i]/100==3){
      for(int j=0;j<3;j++){
	for(int k=1;k<26;k++){
	  if(str[num[i]-300][0]=='t'+k){
	    if(str[num[i]-300][1]=='h'+k&&str[num[i]-300][2]=='e'+k){
	      zure=k;flag=1;break;
	    }
	  }
	}
	if(flag==1)
	  break;
      }
      if(flag==1)
	break;
    }
    else{
      for(int j=0;j<4;j++){
	for(int k=1;k<26;k++){
	  if(str[num[i]-400][0]=='t'+k&&str[num[i]-400][1]=='h'+k){
	    if(str[num[i]-400][2]=='i'+k&&str[num[i]-400][3]=='s'+k||str[num[i]-400][2]=='a'+k&&str[num[i]-400][2]=='t'+k){
	      zure=k;flag=1;break;
	    }
	  }
	}
	if(flag==1)
	  break;
      }
      if(flag==1)
	break;
    }
  }
  for(int j=0;j<10;j++){
    for(int k=0;k<str[j].size();k++){
      str[j][k]=str[j][k]+zure;
    }
  }
  for(int j=0;j<10;j++){
    cout<<str[j];
    if(j!=10)
      cout<<" ";
  }cout<<endl;
  return 0;
}

C++: #include <iostream>
#include <string>
using namespace std;
void slide(string& s) {
  for (auto& c: s)
    if (c == 'a') c = 'z';
    else if (c != '.' && c != ' ') c -= 1;
}
bool check(const string& s) {
  if (s.find("the") == string::npos) return true;
  if (s.find("this") == string::npos) return true;
  if (s.find("that") == string::npos) return true;
  return false;
}
int main() {
  string line;
  while(getline(cin, line)) {
    while(check(line))
      slide(line);
    cout << line << endl;
  }
}