#include<bits/stdc++.h>
using namespace std;

#define REP(i,n) for(int i=0;i<(n);i++)
#define ALL(v) (v).begin(),(v).end()
#define pb push_back

typedef long long ll;
typedef pair<int,int> P;
//-----------------------------------------------------------------------

vector<pair<int,P> > p;

int main()
{
    cin.tie(0);
    ios::sync_with_stdio(false);

    for(int i=1;i<=150;i++){
        for(int j=i+1;j<=150;j++){
            p.pb(make_pair(i*i+j*j,P(i,j)));
        }
    }
    sort(p.begin(),p.end());

    int h,w;
    while(cin>>h>>w,h+w){
        pair<int,P> q=make_pair(h*h+w*w,P(h,w));
        pair<int,P> r=*upper_bound(p.begin(),p.end(),q);
        cout<<r.second.first<<" "<<r.second.second<<endl;
    }
}

#include <iostream>
#include <algorithm>
#include <cctype>
#include <cstdio>
#include <math.h>
#include <map>
#include <queue>
#include <string>
using namespace std;

char ch;
string text;

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