import Text.Printf
data E
= Sevens
Int | E :
+: E
| E :
-: E
| E :
*: E
| E :
/: E
| Neg E
eval m (a :+: b) = (eval m a) + (eval m b)
eval m (a :-: b) = (eval m a) - (eval m b)
eval m (a :*: b) = (eval m a) * (eval m b)
eval m (a :/: b) = (eval m a) / (eval m b)
eval m (Neg a) = -(eval m a)
showE pe = s pe
s pe (a:+:b) = helper pe 1 a b "+"
s pe (a:-:b) = helper pe 2 a b "-"
s pe (a:*:b) = helper pe 3 a b "*"
s pe (a:/:b) = helper pe 4 a b "/"
s pe (Neg a) = "-" ++ (s 2 a)
helper pe p a b op
| p > pe = (s p a) ++ op ++ (s p b)
| otherwise = "(" ++ (s p a
) ++ op
++ (s p b
) ++ ")"
anyE n
= let xs
= f n
in xs
++ map Neg xs
where f n = (Sevens n) : do
k <- [1..n-1]
a <- f k
b <- f (n-k)
op <- if k <= n-k then [ (:+:), (:-:), (:*:), (:/:) ]
else [ (:-:), (:/:) ]
where xs = do let es = anyE 5
m <- [8..999]
e <- es
aW1wb3J0IENvbnRyb2wuTW9uYWQKaW1wb3J0IFRleHQuUHJpbnRmCgpkYXRhIEUgPSBTZXZlbnMgSW50IHwgRSA6KzogRSB8IEUgOi06IEUgfCBFIDoqOiBFIHwgRSA6LzogRSB8IE5lZyBFCgpldmFsIDo6IEludCAtPiBFIC0+IERvdWJsZQpldmFsIG0gKFNldmVucyBrKSA9IGZyb21JbnRlZ3JhbCAkIChpdGVyYXRlIChceCAtPiBtKnggKyA3KSAwKSAhISBrCmV2YWwgbSAoYSA6KzogYikgID0gKGV2YWwgbSBhKSArIChldmFsIG0gYikKZXZhbCBtIChhIDotOiBiKSAgPSAoZXZhbCBtIGEpIC0gKGV2YWwgbSBiKQpldmFsIG0gKGEgOio6IGIpICA9IChldmFsIG0gYSkgKiAoZXZhbCBtIGIpCmV2YWwgbSAoYSA6LzogYikgID0gKGV2YWwgbSBhKSAvIChldmFsIG0gYikKZXZhbCBtIChOZWcgYSkgICAgPSAtKGV2YWwgbSBhKQoKc2hvd0UgOjogSW50IC0+IEUgLT4gU3RyaW5nCnNob3dFIHBlID0gcyBwZQogIHdoZXJlIHMgcGUgKFNldmVucyBrKSA9IHRha2UgayAocmVwZWF0ICc3JykKICAgICAgICBzIHBlIChhOis6YikgPSBoZWxwZXIgcGUgMSBhIGIgIisiCiAgICAgICAgcyBwZSAoYTotOmIpID0gaGVscGVyIHBlIDIgYSBiICItIgogICAgICAgIHMgcGUgKGE6KjpiKSA9IGhlbHBlciBwZSAzIGEgYiAiKiIKICAgICAgICBzIHBlIChhOi86YikgPSBoZWxwZXIgcGUgNCBhIGIgIi8iCiAgICAgICAgcyBwZSAoTmVnIGEpID0gIi0iICsrIChzIDIgYSkKICAgICAgICBoZWxwZXIgcGUgcCBhIGIgb3AKICAgICAgICAgIHwgcCA+IHBlICAgID0gKHMgcCBhKSArKyBvcCArKyAocyBwIGIpCiAgICAgICAgICB8IG90aGVyd2lzZSA9ICIoIiArKyAocyBwIGEpICsrIG9wICsrIChzIHAgYikgKysgIikiCgppbnN0YW5jZSBTaG93IEUgd2hlcmUKICBzaG93ID0gc2hvd0UgMAoKYW55RSA6OiBJbnQgLT4gW0VdCmFueUUgbiA9IGxldCB4cyA9IGYgbiBpbiB4cyArKyBtYXAgTmVnIHhzCiAgd2hlcmUgZiBuID0gKFNldmVucyBuKSA6IGRvCiAgICAgICAgICAgICAgICBrICA8LSBbMS4ubi0xXQogICAgICAgICAgICAgICAgYSAgPC0gZiBrCiAgICAgICAgICAgICAgICBiICA8LSBmIChuLWspCiAgICAgICAgICAgICAgICBvcCA8LSBpZiBrIDw9IG4tayB0aGVuIFsgKDorOiksICg6LTopLCAoOio6KSwgKDovOikgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBbICg6LTopLCAoOi86KSBdCiAgICAgICAgICAgICAgICByZXR1cm4gKG9wIGEgYikKCm1haW4gPSBtYXBNXyAocHV0U3RyTG4gLiAoXChhLGIpIC0+IHByaW50ZiAiJTNkOiAlcyIgYSAoc2hvdyBiKSkpIHhzCiAgd2hlcmUgeHMgPSBkbyBsZXQgZXMgPSBhbnlFIDUKICAgICAgICAgICAgICAgIG0gPC0gWzguLjk5OV0KICAgICAgICAgICAgICAgIGUgPC0gZXMKICAgICAgICAgICAgICAgIGd1YXJkICgoYWJzIChldmFsIG0gZSAtIGZyb21JbnRlZ3JhbCAobSptKSkpIDwgMWUtNykKICAgICAgICAgICAgICAgIHJldHVybiAobSxlKQo=