package main
import (
"bytes"
"fmt"
"io"
"os"
)
func main() {
input, _ := io.ReadAll(os.Stdin)
var sBuf []byte
for _, b := range input {
if b >= '0' && b <= '9' {
sBuf = append(sBuf, b)
}
}
s := string(sBuf)
n := len(s)
if n < 3 {
return
}
M := []int{1000000007, 1000000009}
pref := make([][]int, 2)
pow := make([][]int, 2)
for k := 0; k < 2; k++ {
pref[k] = make([]int, n+1)
pow[k] = make([]int, n+1)
pow[k][0] = 1
for i := 0; i < n; i++ {
pow[k][i+1] = (pow[k][i] * 10) % M[k]
pref[k][i+1] = (pref[k][i]*10 + int(s[i]-'0')) % M[k]
}
}
getHash := func(l, r, idx int) int {
val := (pref[idx][r] - pref[idx][l]*pow[idx][r-l]) % M[idx]
if val < 0 {
val += M[idx]
}
return val
}
verify := func(i, j int) bool {
pA, pB, pC := i-1, j-1, n-1
carry := 0
for pA >= 0 || pB >= i || carry > 0 {
sum := carry
if pA >= 0 {
sum += int(s[pA] - '0')
pA--
}
if pB >= i {
sum += int(s[pB] - '0')
pB--
}
if pC < j || int(s[pC]-'0') != sum%10 {
return false
}
carry = sum / 10
pC--
}
return pC == j-1
}
for Lc := 1; Lc <= n-2; Lc++ {
candidates := []int{Lc, Lc - 1, n - 2*Lc, n - 2*Lc + 1}
for _, La := range candidates {
if La < 1 {
continue
}
Lb := n - Lc - La
if Lb < 1 {
continue
}
if La > 1 && s[0] == '0' {
continue
}
if Lb > 1 && s[La] == '0' {
continue
}
if Lc > 1 && s[La+Lb] == '0' {
continue
}
hA1 := getHash(0, La, 0)
hB1 := getHash(La, La+Lb, 0)
hC1 := getHash(La+Lb, n, 0)
if (hA1+hB1)%M[0] != hC1 {
continue
}
hA2 := getHash(0, La, 1)
hB2 := getHash(La, La+Lb, 1)
hC2 := getHash(La+Lb, n, 1)
if (hA2+hB2)%M[1] != hC2 {
continue
}
if verify(La, La+Lb) {
var out bytes.Buffer
out.WriteString(s[:La])
out.WriteByte('+')
out.WriteString(s[La : La+Lb])
out.WriteByte('=')
out.WriteString(s[La+Lb:])
fmt.Println(out.String())
return
}
}
}
}