-- Slide 58

import Data.Char

cechar n c = chr ((mod ((ord c) + n - ord 'a') ((ord 'z') - ord 'a'  + 1)) + ord 'a')

cesar n = map (cechar n)

inlinecesar n s = map (chr.(+ ord 'a').(flip mod 26).(+ n).(subtract (ord 'a')).ord) s

getCorrectValue::IO Int
getCorrectValue = do
	putStrLn "Please give a number in [1, 26["
	x <- getLine
	let i = (read x)::Int
	if i > 0 && i < 26 then return i else getCorrectValue

main::IO ()
main = do
	n <- getCorrectValue
	putStrLn "Please give a word"
	s <- getLine
	putStrLn (cesar n s)
	putStrLn (inlinecesar n s)