data DP
= Z
| L DP
| R DP
deriving Show
ic Z = Nothing
ic (L n) = Just( R n )
ic (R n) = L <$> (ic n)
acc Z = 0
acc (L n) = (acc n) + 1
acc (R n) = (acc n) + 1
add
:: DP
-> DP
-> Maybe DP
add Z _ = Just Z
add _ Z = Just Z
add x y
| ( acc x ) < ( acc y ) = case y of
(L z) -> add x z
(R z) -> add x z
| ( acc x ) < ( acc y ) = case x of
(L z) -> add z y
(R z) -> add z y
(L z) -> case x of
(L w) -> L <$> (add z w)
(R w) -> R <$> (add z w)
Z -> Nothing
(R z) -> case (ic x) of
Just (L w) -> L <$> (add z w)
Just (R w) -> R <$> (add z w)
Nothing -> Nothing
fromstr ('L' : xs)= L (fromstr xs)
fromstr ('R' : xs)= R (fromstr xs)
fromstr ('Z' : xs)= Z
fromstr (_ : xs)= fromstr xs
fromstr [] = Z
main = do {
}
CgoKZGF0YSBEUCA9IFogfCBMIERQIHwgUiBEUCBkZXJpdmluZyBTaG93CgppYzo6RFAtPk1heWJlIERQCmljIFogPSBOb3RoaW5nCmljIChMIG4pID0gSnVzdCggUiBuICkKaWMgKFIgbikgPSBMIDwkPiAoaWMgbikKCmFjYzo6IERQIC0+IEludAphY2MgWiA9IDAKYWNjIChMIG4pID0gKGFjYyBuKSArIDEKYWNjIChSIG4pID0gKGFjYyBuKSArIDEKCmFkZDo6IERQIC0+IERQIC0+IE1heWJlIERQCgphZGQgWiBfID0gSnVzdCBaCmFkZCBfIFogPSBKdXN0IFoKCmFkZCB4IHkKICAgIHwgKCBhY2MgeCApIDwgKCBhY2MgeSApID0gY2FzZSB5IG9mIAogICAgICAgIChMIHopIC0+IGFkZCB4IHoKICAgICAgICAoUiB6KSAtPiBhZGQgeCB6CiAgICAgICAgCiAgICB8ICggYWNjIHggKSA8ICggYWNjIHkgKSA9IGNhc2UgeCBvZiAKICAgICAgICAoTCB6KSAtPiBhZGQgeiB5CiAgICAgICAgKFIgeikgLT4gYWRkIHogeQogICAgICAgIAogICAgfCBvdGhlcndpc2UgPSBjYXNlIHkgb2YgCiAgICAgICAgKEwgeikgLT4gY2FzZSB4IG9mIAogICAgICAgICAgICAoTCB3KSAtPiBMIDwkPiAoYWRkIHogdykKICAgICAgICAgICAgKFIgdykgLT4gUiA8JD4gKGFkZCB6IHcpCiAgICAgICAgICAgIFogLT4gTm90aGluZyAKICAgIAogICAgICAgIChSIHopIC0+IGNhc2UgKGljIHgpIG9mIAogICAgICAgICAgICBKdXN0IChMIHcpIC0+IEwgPCQ+IChhZGQgeiB3KQogICAgICAgICAgICBKdXN0IChSIHcpIC0+IFIgPCQ+IChhZGQgeiB3KQogICAgICAgICAgICBOb3RoaW5nIC0+IE5vdGhpbmcKCgpmcm9tc3RyIDo6IFN0cmluZyAtPiBEUApmcm9tc3RyICgnTCcgOiB4cyk9IEwgKGZyb21zdHIgeHMpCmZyb21zdHIgKCdSJyA6IHhzKT0gUiAoZnJvbXN0ciB4cykKZnJvbXN0ciAoJ1onIDogeHMpPSBaCmZyb21zdHIgKF8gOiB4cyk9IGZyb21zdHIgeHMKZnJvbXN0ciBbXSA9IFoKCm1haW4gPSBkbyB7CiAgICB4IDwtIChmcm9tc3RyIDwkPiBnZXRMaW5lKTsKICAgIHkgPC0gKGZyb21zdHIgPCQ+IGdldExpbmUpOwogICAgcHJpbnQgKCBhZGQgeCB5ICk7Cn0=