
import Data.List

asciiA = fromEnum 'a'
asciiZ = fromEnum 'z'

specificWords = ["the","that","this"]
containtsWords s = any id $ map (flip isInfixOf s) specificWords

main = do
  code <- getContents
  let plaintextCandidate = map (flip slideString code) [0..(asciiZ - asciiA)]
  let plaintext = filter containtsWords plaintextCandidate
  mapM_ putStr plaintext

slideString :: Int -> String -> String
slideString n s = map (slideChar n) s

slideChar :: Int -> Char -> Char
slideChar n c 
  | 'a' <= c && c <= 'z' = slideChar' n c
  | otherwise = c
  where 
    ascii = fromEnum ascii
    slideChar' n c = toEnum $ asciiA + ((fromEnum c - asciiA + n) `mod` (asciiZ - asciiA + 1))



