Problem:
Score : 300 points

Problem Statement

Sitting in a station waiting room, Joisino is gazing at her train ticket.

The ticket is numbered with four digits A, B, C and D in this order, each between 0 and 9 (inclusive).

In the formula A op1 B op2 C op3 D = 7, replace each of the symbols op1, op2 and op3 with + or - so that the formula holds.

The given input guarantees that there is a solution. If there are multiple solutions, any of them will be accepted.

Constraints

0≤A,B,C,D≤9

All input values are integers.

It is guaranteed that there is a solution.

Input

Input is given from Standard Input in the following format:

ABCD

Output

Print the formula you made, including the part =7.

Use the signs + and -.

Do not print a space between a digit and a sign.

Sample Input 1

1222

Sample Output 1

1+2+2+2=7

This is the only valid solution.

Sample Input 2

0290

Sample Output 2

0-2+9+0=7

0 - 2 + 9 - 0 = 7 is also a valid solution.

Sample Input 3

3242

Sample Output 3

3+2+4-2=7

Solution in Haskell (GHC 7.10.3) (judge verdict: Accepted)

import qualified Data.Vector.Unboxed as VU
import qualified Data.ByteString.Char8 as BS
import Control.Monad
import Data.List
import Data.Char

data Op = Add | Sub

instance Show Op where
    show Add = "+"
    show Sub = "-"

apply :: Op -> Int -> Int -> Int
apply Add x y = x + y
apply Sub x y = x - y

data Expr = Val Int | App Op Expr Expr

instance Show Expr where
    show (Val n)     = show n
    show (App o l r) = brak l ++ show o ++ brak r
                        where brak (Val n) = show n
                              brak e       = show e

eval :: Expr -> Int
eval (Val n) = n
eval (App o l r) = apply o (eval l) (eval r)



main :: IO ()
main = do
    [a,b,c,d] <- map digitToInt <$> getLine
    let m = do
        i1 <- [Add,Sub]
        i2 <- [Add,Sub]
        i3 <- [Add,Sub]
        let xxx = App i3 (App i2 (App i1 (Val a) (Val b)) (Val c)) (Val d)
        guard $ eval xxx == 7
        return $ show xxx ++ "=7"
    putStrLn $ head m

readInt :: BS.ByteString -> Maybe (Int,BS.ByteString)
readInt xs = do
    (x,ys) <- BS.readInt xs
    return (x,BS.tail ys)