#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include <iostream>
#include <map>
#include <numeric>
#include <set>
#include <sstream>
#include <string>
#include <vector>
#include <cmath>
#include <string.h>
using namespace std;

#define FOR(i,s,e) for (int i = int(s); i != int(e); i++)
#define REP(i,e) for (int i = 0; i != int(e); i++)
#define FORIT(i, A) for (auto i : A)
#define ISEQ(c) (c).begin(), (c).end()
#define PRINT(x) cout << (x) << endl
#define SZ(x) ((int)(x).size())

int check(const char* word)
{
	if ((word[1] - word[0]) % 26 != ('h'-'t'))
		return -1;

	if ((word[2] - word[1]) % 26 == ('e'-'h') && 
		(word[3] == ' ' || word[3] == '\0' || word[3] == '\n'))
	{
		return (word[0] - 't' + 26) % 26;
	}
	if ((word[2] - word[1]) % 26 == ('a'-'h') && 
		(word[3] - word[2]) % 26 == ('t'-'a') &&
		(word[4] == ' ' || word[4] == '\0' || word[4] == '\n'))
	{
		return (word[0] - 't' + 26) % 26;
	}
	if ((word[2] - word[1]) % 26 == ('i'-'h') && 
		(word[3] - word[2]) % 26 == ('s'-'i') && 
		(word[4] == ' ' || word[4] == '\0' || word[4] == '\n'))
	{
		return (word[0] - 't' + 26) % 26;
	}
	return -1;
}

int main(int argc, char const *argv[])
{
	string s;
	if (getline(std::cin, s))
	{
		int len = s.length();
		int d = check(&s[0]);
		int i = 3;
		while (d == -1)
		{
			while(i < len && s[i] != ' ')
				i++;
			if (i == len) break;
			i++;
			d = check(&s[i]);
		}
		REP(j, len)
		{
			if (s[j] >= 'a' && s[j] <= 'z')
			{
				s[j] = (s[j] - 'a' - d + 26) % 26 + 'a';
			}
		}
		std::cout << s << std::endl;
	}
	return 0;
}