module Main where
import Prelude hiding ((+), (*), (^))
data N = Z | S N
h :: N -> N -> N -> N
h Z _ b = S b
h (S Z) a Z = a
h (S (S Z)) _ Z = Z
h _ _ Z = S Z
h (S n) (S a) (S b) = h n (S a) (h (S n) (S a) b)
(+) :: N -> N -> N
(+) = h (S Z)
(*) :: N -> N -> N
(*) = h (S (S Z))
(^) :: N -> N -> N
(^) = h (S (S (S Z)))
main
= print ((S
(S Z
)) + (S
(S
(S Z
)))) >> print ((S
(S Z
)) * (S
(S
(S Z
)))) >> print ((S
(S Z
)) ^ (S
(S
(S Z
))))
bW9kdWxlIE1haW4gd2hlcmUKCmltcG9ydCBQcmVsdWRlIGhpZGluZyAoKCspLCAoKiksICheKSkKCmRhdGEgTiA9IFogfCBTIE4KICBkZXJpdmluZyAoRXEsIFNob3cpCiAgCmggOjogTiAtPiBOIC0+IE4gLT4gTgpoICAgICAgIFogICAgIF8gICAgIGIgID0gUyBiCmggICAgKFMgWikgICAgYSAgICAgWiAgPSBhCmggKFMgKFMgWikpICAgXyAgICAgWiAgPSBaCmggICAgICAgXyAgICAgXyAgICAgWiAgPSBTIFoKaCAgICAoUyBuKSAoUyBhKSAoUyBiKSA9IGggbiAoUyBhKSAoaCAoUyBuKSAoUyBhKSBiKQoKKCspIDo6IE4gLT4gTiAtPiBOCigrKSA9IGggKFMgWikKCigqKSA6OiBOIC0+IE4gLT4gTgooKikgPSBoIChTIChTIFopKQoKKF4pIDo6IE4gLT4gTiAtPiBOCiheKSA9IGggKFMgKFMgKFMgWikpKQoKbWFpbiA9IHByaW50ICgoUyAoUyBaKSkgKyAoUyAoUyAoUyBaKSkpKSA+PgogICAgICAgcHJpbnQgKChTIChTIFopKSAqIChTIChTIChTIFopKSkpID4+CiAgICAgICBwcmludCAoKFMgKFMgWikpIF4gKFMgKFMgKFMgWikpKSk=