#include <bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define pii pair <int, int>
#define all(v) (v).begin() (v).end()
#define fi first
#define se second
#define ll long long
#define ull long long
#define ld long double

#define MOD 1000000007
#define MAXN 1000006

using namespace std;

char s[MAXN], sa[MAXN];
int l, H[MAXN], I[MAXN];

int fast_pow(ll b, int e) {
    ll ans = 1;
    for ( ; e; b=(b*b)%MOD, e>>=1) {
        if ((e&1)) ans = (ans*b)%MOD;
    }
    return ans;
}

int getNum(int i, int t) {
    int ans = (H[i] - H[i + t] + MOD)%MOD;
    ans = ((ll)ans*I[l - i - t]) % MOD;
    return ans;
}

int main(int nargs, char **args) {
    scanf("%s", s);
    l = strlen(s);

    for (int i = 0, p10 = 1; i <= l; i++) {
        I[i] = fast_pow(p10, MOD - 2);
        p10 = (p10*10LL) % MOD;
    }
    for (int i = l-1, p10 = 1; i >= 0; i--) {
        H[i] = (H[i+1] + (ll)(s[i] - '0')*p10)%MOD;
        p10 = (p10*10LL) % MOD;
    }
    int l1, l2;
    for (l1 = (l-1)>>1; l1 > 0; l1--) {
        l2 = min((l - l1)/2, l - 2*l1);

        if ((getNum(0, l1) + getNum(l1, l2))%MOD == H[l1+l2]) {
            break;
        }
        if (l2 > 1) {
            l2--;
            if ((getNum(0, l1) + getNum(l1, l2))%MOD == H[l1+l2]) {
                break;
            }
        }
    }
    for (int i = 0, i2 = 0; i < l; i++) {
        if (i == l1) sa[i2++] = '+';
        if (i == l1 + l2) sa[i2++] = '=';
        sa[i2++] = s[i];
    }
    puts(sa);

    return 0;
}


#include <bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define pii pair <int, int>
#define all(v) (v).begin() (v).end()
#define fi first
#define se second
#define ll long long
#define ull long long
#define ld long double

#define MOD 1000000009
#define MAXN 1000006

using namespace std;

char s[MAXN], sa[MAXN];
int l, H[MAXN], I[MAXN];

int fast_pow(ll b, int e) {
    ll ans = 1;
    for ( ; e; b=(b*b)%MOD, e>>=1) {
        if ((e&1)) ans = (ans*b)%MOD;
    }
    return ans;
}

int getNum(int i, int t) {
    int ans = (H[i] - H[i + t] + MOD)%MOD;
    ans = ((ll)ans*I[l - i - t]) % MOD;
    return ans;
}

int main(int nargs, char **args) {
    scanf("%s", s);
    l = strlen(s);

    for (int i = 0, p10 = 1; i <= l; i++) {
        I[i] = fast_pow(p10, MOD - 2);
        p10 = (p10*10LL) % MOD;
    }
    for (int i = l-1, p10 = 1; i >= 0; i--) {
        H[i] = (H[i+1] + (ll)(s[i] - '0')*p10)%MOD;
        p10 = (p10*10LL) % MOD;
    }
    int l1, l2;
    for (l1 = (l-1)>>1; l1 > 0; l1--) {
        l2 = min((l - l1)/2, l - 2*l1);

        if ((getNum(0, l1) + getNum(l1, l2))%MOD == H[l1+l2]) {
            break;
        }
    }
    for (int i = 0, i2 = 0; i < l; i++) {
        if (i == l1) sa[i2++] = '+';
        if (i == l1 + l2) sa[i2++] = '=';
        sa[i2++] = s[i];
    }
    puts(sa);

    return 0;
}


#include <bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define pii pair <int, int>
#define all(v) (v).begin() (v).end()
#define fi first
#define se second
#define ll long long
#define ull long long
#define ld long double

#define MOD 1000000009
#define MAXN 1000006

using namespace std;

char s[MAXN], sa[MAXN];
int l, H[MAXN], I[MAXN];

int fast_pow(ll b, int e) {
    ll ans = 1;
    for ( ; e; b=(b*b)%MOD, e>>=1) {
        if ((e&1)) ans = (ans*b)%MOD;
    }
    return ans;
}

int getNum(int i, int t) {
    int ans = (H[i] - H[i + t] + MOD)%MOD;
    ans = ((ll)ans*I[l - i - t]) % MOD;
    return ans;
}

int main(int nargs, char **args) {
    scanf("%s", s);
    l = strlen(s);

    for (int i = 0, p10 = 1; i <= l; i++) {
        I[i] = fast_pow(p10, MOD - 2);
        p10 = p10*10L % MOD;
    }
    for (int i = l-1, p10 = 1; i >= 0; i--) {
        H[i] = (H[i+1] + (ll)(s[i] - '0')*p10)%MOD;
        p10 = p10*10L % MOD;
    }
    int l1, l2;
    for (l1 = (l-1)>>1; l1 > 0; l1--) {
        l2 = min((l - l1)/2, l - 2*l1);

        if ((getNum(0, l1) + getNum(l1, l2))%MOD == H[l1+l2]) {
            break;
        }
    }
    for (int i = 0, i2 = 0; i < l; i++) {
        if (i == l1) sa[i2++] = '+';
        if (i == l1 + l2) sa[i2++] = '=';
        sa[i2++] = s[i];
    }
    puts(sa);

    return 0;
}


#include <bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define pii pair <int, int>
#define all(v) (v).begin() (v).end()
#define fi first
#define se second
#define ll long long
#define ull long long
#define ld long double

#define MOD 1000000007
#define MAXN 1000006

using namespace std;

char s[MAXN], sa[MAXN];
int l, H[MAXN], I[MAXN];

int fast_pow(ll b, int e) {
    ll ans = 1;
    for ( ; e; b=(b*b)%MOD, e>>=1) {
        if ((e&1)) ans = (ans*b)%MOD;
    }
    return ans;
}

int getNum(int i, int t) {
    int ans = (H[i] - H[i + t] + MOD)%MOD;
    ans = ((ll)ans*I[l - i - t]) % MOD;
    return ans;
}

int main(int nargs, char **args) {
    scanf("%s", s);
    l = strlen(s);

    for (int i = 0, p10 = 1; i <= l; i++) {
        I[i] = fast_pow(p10, MOD - 2);
        p10 = (p10*10LL) % MOD;
    }
    for (int i = l-1, p10 = 1; i >= 0; i--) {
        H[i] = (H[i+1] + (ll)(s[i] - '0')*p10)%MOD;
        p10 = (p10*10LL) % MOD;
    }
    int l1, l2;
    for (l1 = 1; l1 <= (l-1)>>1; l1++) {
        l2 = min((l - l1)/2, l - 2*l1);
        if ((l2 == 1 || (l2 > 1 && s[l1] != '0'))
            && (getNum(0, l1) + getNum(l1, l2))%MOD == H[l1+l2]) {

            break;
        }
        if (l2 > 1) {
            l2--;
            if ((l2 == 1 || (l2 > 1 && s[l1] != '0'))
                && (getNum(0, l1) + getNum(l1, l2))%MOD == H[l1+l2]) {

                break;
            }
        }
    }
    for (int i = 0, i2 = 0; i < l; i++) {
        if (i == l1) sa[i2++] = '+';
        if (i == l1 + l2) sa[i2++] = '=';
        sa[i2++] = s[i];
    }
    puts(sa);

    return 0;
}


#include <bits/stdc++.h>

#define x first

#define y second

#define eps 1e-9

#define pb push_back

#define inf 0x3f3f3f3f

#define mod 82709991

#define sq(_) ((_)*(_))

#define cb(_) ((_)*(_)*(_))

#define bit(x, y) (((x)>>(y))&1)

#define bctz(x) (__builtin_ctz(x))

#define bclz(x) (__builtin_clz(x))

#define bctzl(x) (__builtin_ctzll(x))

#define bclzl(x) (__builtin_clzll(x))

#define bpt(x) (__builtin_popcount(x))

#define bptl(x) (__builtin_popcountll(x))

#define PQ priority_queue<pii, vector<pii>, greater<pii> >

using namespace std;

typedef double DO;

typedef long long INT;

typedef vector<int> VI;

typedef pair<int, int> pii;

typedef pair<pii, int> pi3;

template<typename T, typename U> inline void smin(T &a, U b) {if (a>b) a=b;}

template<typename T, typename U> inline void smax(T &a, U b) {if (a<b) a=b;}

template<class T> inline void gn(T &x) {char c, sg=0; while (c=getchar(), (c>'9' || c<'0') && c!='-');for((c=='-'?sg=1, c=getchar():0), x=0; c>='0' && c<='9'; c=getchar()) x=(x<<1)+(x<<3)+c-'0';if (sg) x=-x;}

template<class T1, class T2> inline void gn(T1 &x1, T2 &x2) {gn(x1), gn(x2);}

template<class T1, class T2, class T3> inline void gn(T1 &x1, T2 &x2, T3 &x3) {gn(x1), gn(x2), gn(x3);}

template<class T1, class T2, class T3, class T4> inline void gn(T1 &x1, T2 &x2, T3 &x3, T4 &x4) {gn(x1), gn(x2), gn(x3), gn(x4);}

template<class T> inline void print(T x) {if (x<0) {putchar('-');return print(-x);}if (x<10) {putchar('0'+x);return;} print(x/10);putchar(x%10+'0');}

template<class T> inline void printsp(T x) {print(x); putchar(' ');}

template<class T> inline void println(T x) {print(x); putchar('\n');}

template<class T1, class T2> inline void print(T1 x1, T2 x2){printsp(x1), println(x2);}

template<class T1, class T2, class T3> inline void print(T1 x1, T2 x2, T3 x3){printsp(x1), printsp(x2), println(x3);}

template<class T1, class T2, class T3, class T4> inline void print(T1 x1, T2 x2, T3 x3, T4 x4){printsp(x1), printsp(x2), printsp(x3), println(x4);}

int power(int a, int b, int m, int ans=1) {

	for (; b; b>>=1, a=1LL*a*a%m) if (b&1) ans=1LL*ans*a%m;

	return ans;

}

#ifndef ONLINE_JUDGE

void debug() {cout << endl;}

template<typename T, typename... Args>void debug(T&& head, Args&&... tail) {cout << head << ' ';debug(tail...);}

#endif

#define NN 1000010

char s[NN];

int n, h[NN];

void pre() {

	n=strlen(s+1);

	for(int i=1; i<=n; i++) {

		h[i]=(h[i-1]*10+s[i]-'0')%mod;

	}

}

int calc(int st, int ed) {

	return (1LL*h[st-1]*power(10, ed-st+1, mod)-h[ed]+mod)%mod;

}

void Gameover(int a, int b) {

	for(int i=1; i<a; i++) putchar(s[i]); putchar('+');

	for(int i=a; i<b; i++) putchar(s[i]); putchar('=');

	for(int i=b; i<=n; i++) putchar(s[i]);

	exit(0);

}

void test(int a, int b) {

	if(a>0 and a<b and (calc(1, a)+calc(a+1, b))%mod==calc(b+1, n)) {

		if(s[a+1]>'0' or a+1==b) Gameover(a+1, b+1);

	}

}

void left(int id) {

	test(n-id, id-1);

	test(n-id+1, id-1);

}

void right(int id) {

	test(2*id-n-1, id-1);

	test(2*id-n-2, id-1);

}

int main() {

#ifndef ONLINE_JUDGE

	freopen("in.in", "r", stdin);

	freopen("out.out", "w", stdout);

#endif

	scanf("%s", s+1);

	pre();

	for(int i=(n+3)/2; 3*i<2*n+4; i++) if(s[i]>'0' or i==n) {

		left(i);

		right(i);

	}

}


#include <bits/stdc++.h>

#define inf 0x3f3f3f3f

#define INF 0x3f3f3f3f3f3f3f3fLL

#define MOD 1000000007

#define pb push_back

#define sq(x) ((x)*(x))

#define x first

#define y second

#define eps 1e-8

#define bpt(x) (__builtin_popcount(x))

#define bptl(x) (__builtin_popcountll(x))

#define bit(x, y) (((x)>>(y))&1)

#define bclz(x) (__builtin_clz(x))

#define bclzl(x) (__builtin_clzll(x))

#define bctz(x) (__builtin_ctz(x))

#define bctzl(x) (__builtin_ctzll(x))

using namespace std;

typedef long long INT;

typedef vector<int> VI;

typedef pair<int, int> pii;

typedef pair<pii, int> pi3;

typedef double DO;

template<typename T, typename U> inline void smin(T &a, U b) {if (a>b) a=b;}

template<typename T, typename U> inline void smax(T &a, U b) {if (a<b) a=b;}

template<typename T> inline void gn(T &x) {char c, sg=0; while (c=getchar(), (c>'9' || c<'0') && c!='-');for((c=='-'?sg=1, c=getchar():0), x=0; c>='0' && c<='9'; c=getchar()) x=(x<<1)+(x<<3)+c-'0';if (sg) x=-x;}

template<class T, class T1>inline void gn(T &x, T1 &y) {gn(x); gn(y);}

template<class T, class T1, class T2>inline void gn(T &x, T1 &y, T2 &z) {gn(x); gn(y); gn(z);}

template<typename T> inline void print(T x) {if (x<0) {putchar('-');return print(-x);}if (x<10) {putchar('0'+x);return;} print(x/10);putchar(x%10+'0');}

template<typename T> inline void println(T x) {print(x), putchar('\n');}

template<typename T> inline void printsp(T x) {print(x), putchar(' ');}

template<class T, class T1> inline void print(T x, T1 y) {printsp(x), println(y);}

template<class T, class T1, class T2> inline void print(T x, T1 y, T2 z) {printsp(x), printsp(y), println(z);}

int power(int a, int b, int m, int ans=1) {

	for (; b; b>>=1, a=1LL*a*a%m) if (b&1) ans=1LL*ans*a%m;

	return ans;

}

#define NN 1111111

char s[NN];

int main() {

#ifndef ONLINE_JUDGE

	freopen("in.in", "r", stdin);

	freopen("out.out", "w", stdout);

#endif

	scanf("%s", s);

	int n=strlen(s);

	int m=(n+2)/3;

	for(int i=m; i<=n/2; i++){

		int r=n-i;

		if(i>1 && s[r]=='0') continue;

		if(r>i && !(r-i>1 && s[i]=='0' || i>1 && s[0]=='0') && s[0]<=s[r]){

			int a=i;

			int b=r-i;

			int c=0, ok=1, up=0;

			for(int k=0, j; ok && k<500; k++){

				j=rand()%i;

				int v1=(j<a ? s[i-j-1]-'0' : 0);

				int v2=(j<b ? s[r-j-1]-'0' : 0);

				if((v1+v2)%10!=s[n-j-1]-'0' && (v1+v2+1)%10!=s[n-j-1]-'0') ok=0;

			}

			for(int j=0; j<i && ok; j++){

				int v1=(j<a ? s[i-j-1]-'0' : 0);

				int v2=(j<b ? s[r-j-1]-'0' : 0);

				if((v1+v2+up)%10!=s[n-j-1]-'0') ok=0;

				up=(v1+v2+up)/10;

			}

			if(ok && !up){

				for(int j=0; j<i; j++) putchar(s[j]);

				putchar('+');

				for(int j=i; j<r; j++) putchar(s[j]);

				putchar('=');

				for(int j=r; j<n; j++) putchar(s[j]);

				puts("");

				return 0;

			}

		}

		if(r>i && !(i>1 && s[r-i]=='0' || r-i>1 && s[0]=='0') && s[r-i]<=s[r]){

			int a=r-i;

			int b=i;

			int c=0, ok=1, up=0;

			for(int k=0, j; k<500 && ok; k++){

				j=rand()%i;

				int v1=(j<a ? s[r-i-j-1]-'0' : 0);

				int v2=(j<b ? s[r-j-1]-'0' : 0);

				if((v1+v2)%10!=s[n-j-1]-'0' && (v1+v2+1)%10!=s[n-j-1]-'0') ok=0;

			}

			for(int j=0; j<i && ok; j++){

				int v1=(j<a ? s[r-i-j-1]-'0' : 0);

				int v2=(j<b ? s[r-j-1]-'0' : 0);

				if((v1+v2+up)%10!=s[n-j-1]-'0') ok=0;

				up=(v1+v2+up)/10;

			}

			if(ok && !up){

				for(int j=0; j<r-i; j++) putchar(s[j]);

				putchar('+');

				for(int j=r-i; j<r; j++) putchar(s[j]);

				putchar('=');

				for(int j=r; j<n; j++) putchar(s[j]);

				puts("");

				return 0;

			}

		}

		if(i>1 && r-i+1<i && !(r-i+1>1 && s[i-1]=='0' || i-1>1 && s[0]=='0') && s[r]=='1'){

			int a=i-1;

			int b=r-i+1;

			int c=0, ok=1, up=0;

			for(int k=0, j; k<500 && ok; k++){

				j=rand()%i;

				int v1=(j<a ? s[i-j-2]-'0' : 0);

				int v2=(j<b ? s[r-j-1]-'0' : 0);

				if((v1+v2)%10!=s[n-j-1]-'0' && (v1+v2+1)%10!=s[n-j-1]-'0') ok=0;

			}

			for(int j=0; j<i && ok; j++){

				int v1=(j<a ? s[i-j-2]-'0' : 0);

				int v2=(j<b ? s[r-j-1]-'0' : 0);

				if((v1+v2+up)%10!=s[n-j-1]-'0') ok=0;

				up=(v1+v2+up)/10;

			}

			if(ok && !up){

				for(int j=0; j<i-1; j++) putchar(s[j]);

				putchar('+');

				for(int j=i-1; j<r; j++) putchar(s[j]);

				putchar('=');

				for(int j=r; j<n; j++) putchar(s[j]);

				puts("");

				return 0;

			}

		}

		if(i>1 && r-i+1<i && !(i-1>1 && s[r-i+1]=='0' || r-i+1>1 && s[0]=='0') && s[r]=='1'){

			int a=r-i+1;

			int b=i-1;

			int c=0, ok=1, up=0;

			for(int k=0, j; k<500 && ok; k++){

				j=rand()%i;

				int v1=(j<a ? s[r-i-j]-'0' : 0);

				int v2=(j<b ? s[r-j-1]-'0' : 0);

				if((v1+v2)%10!=s[n-j-1]-'0' && (v1+v2+1)%10!=s[n-j-1]-'0') ok=0;

			}

			for(int j=0; j<i && ok; j++){

				int v1=(j<a ? s[r-i-j]-'0' : 0);

				int v2=(j<b ? s[r-j-1]-'0' : 0);

				if((v1+v2+up)%10!=s[n-j-1]-'0') ok=0;

				up=(v1+v2+up)/10;

			}

			if(ok && !up){

				for(int j=0; j<r-i+1; j++) putchar(s[j]);

				putchar('+');

				for(int j=r-i+1; j<r; j++) putchar(s[j]);

				putchar('=');

				for(int j=r; j<n; j++) putchar(s[j]);

				puts("");

				return 0;

			}

		}

	}

	return 0;

}


#include <bits/stdc++.h>

#define x first

#define y second

#define eps 1e-9

#define pb push_back

#define inf 0x3f3f3f3f

#define mod 82709991

#define Mod 3103991

#define sq(_) ((_)*(_))

#define cb(_) ((_)*(_)*(_))

#define bit(x, y) (((x)>>(y))&1)

#define bctz(x) (__builtin_ctz(x))

#define bclz(x) (__builtin_clz(x))

#define bctzl(x) (__builtin_ctzll(x))

#define bclzl(x) (__builtin_clzll(x))

#define bpt(x) (__builtin_popcount(x))

#define bptl(x) (__builtin_popcountll(x))

#define PQ priority_queue<pii, vector<pii>, greater<pii> >

using namespace std;

typedef double DO;

typedef long long INT;

typedef vector<int> VI;

typedef pair<int, int> pii;

typedef pair<pii, int> pi3;

template<typename T, typename U> inline void smin(T &a, U b) {if (a>b) a=b;}

template<typename T, typename U> inline void smax(T &a, U b) {if (a<b) a=b;}

template<class T> inline void gn(T &x) {char c, sg=0; while (c=getchar(), (c>'9' || c<'0') && c!='-');for((c=='-'?sg=1, c=getchar():0), x=0; c>='0' && c<='9'; c=getchar()) x=(x<<1)+(x<<3)+c-'0';if (sg) x=-x;}

template<class T1, class T2> inline void gn(T1 &x1, T2 &x2) {gn(x1), gn(x2);}

template<class T1, class T2, class T3> inline void gn(T1 &x1, T2 &x2, T3 &x3) {gn(x1), gn(x2), gn(x3);}

template<class T1, class T2, class T3, class T4> inline void gn(T1 &x1, T2 &x2, T3 &x3, T4 &x4) {gn(x1), gn(x2), gn(x3), gn(x4);}

template<class T> inline void print(T x) {if (x<0) {putchar('-');return print(-x);}if (x<10) {putchar('0'+x);return;} print(x/10);putchar(x%10+'0');}

template<class T> inline void printsp(T x) {print(x); putchar(' ');}

template<class T> inline void println(T x) {print(x); putchar('\n');}

template<class T1, class T2> inline void print(T1 x1, T2 x2){printsp(x1), println(x2);}

template<class T1, class T2, class T3> inline void print(T1 x1, T2 x2, T3 x3){printsp(x1), printsp(x2), println(x3);}

template<class T1, class T2, class T3, class T4> inline void print(T1 x1, T2 x2, T3 x3, T4 x4){printsp(x1), printsp(x2), printsp(x3), println(x4);}

int power(int a, int b, int m, int ans=1) {

	for (; b; b>>=1, a=1LL*a*a%m) if (b&1) ans=1LL*ans*a%m;

	return ans;

}

#ifndef ONLINE_JUDGE

void debug() {cout << endl;}

template<typename T, typename... Args>void debug(T&& head, Args&&... tail) {cout << head << ' ';debug(tail...);}

#endif

#define NN 1000010

char s[NN];

int n, h[NN], H[NN];

void pre() {

	n=strlen(s+1);

	for(int i=1; i<=n; i++) {

		h[i]=(h[i-1]*10+s[i]-'0')%mod;

		H[i]=(H[i-1]*10+s[i]-'0')%Mod;

	}

}

int calc(int st, int ed) {

	return (1LL*h[st-1]*power(10, ed-st+1, mod)-h[ed]+mod)%mod;

}

int Calc(int st, int ed) {

	return (1LL*H[st-1]*power(10, ed-st+1, Mod)-H[ed]+Mod)%Mod;

}

void Gameover(int a, int b) {

	for(int i=1; i<a; i++) putchar(s[i]); putchar('+');

	for(int i=a; i<b; i++) putchar(s[i]); putchar('=');

	for(int i=b; i<=n; i++) putchar(s[i]);

	exit(0);

}

void test(int a, int b) {

	if(a>0 and a<b and (calc(1, a)+calc(a+1, b))%mod==calc(b+1, n)) {

		if(s[a+1]>'0' or a+1==b) {

			if((Calc(1, a)+Calc(a+1, b))%Mod==Calc(b+1, n)) {

				Gameover(a+1, b+1);

			}

		}

	}

}

void left(int id) {

	test(n-id, id-1);

	test(n-id+1, id-1);

}

void right(int id) {

	test(2*id-n-1, id-1);

	test(2*id-n-2, id-1);

}

int main() {

#ifndef ONLINE_JUDGE

	freopen("in.in", "r", stdin);

	freopen("out.out", "w", stdout);

#endif

	scanf("%s", s+1);

	pre();

	for(int i=(n+3)/2; i<2*n+4; i++) if(s[i]>'0') {

		left(i);

		right(i);

	}

}


#include <bits/stdc++.h>

#define inf 0x3f3f3f3f

#define INF 0x3f3f3f3f3f3f3f3fLL

#define MOD 1000000007

#define pb push_back

#define sq(x) ((x)*(x))

#define x first

#define y second

#define eps 1e-8

#define bpt(x) (__builtin_popcount(x))

#define bptl(x) (__builtin_popcountll(x))

#define bit(x, y) (((x)>>(y))&1)

#define bclz(x) (__builtin_clz(x))

#define bclzl(x) (__builtin_clzll(x))

#define bctz(x) (__builtin_ctz(x))

#define bctzl(x) (__builtin_ctzll(x))

using namespace std;

typedef long long INT;

typedef vector<int> VI;

typedef pair<int, int> pii;

typedef pair<pii, int> pi3;

typedef double DO;

template<typename T, typename U> inline void smin(T &a, U b) {if (a>b) a=b;}

template<typename T, typename U> inline void smax(T &a, U b) {if (a<b) a=b;}

template<typename T> inline void gn(T &x) {char c, sg=0; while (c=getchar(), (c>'9' || c<'0') && c!='-');for((c=='-'?sg=1, c=getchar():0), x=0; c>='0' && c<='9'; c=getchar()) x=(x<<1)+(x<<3)+c-'0';if (sg) x=-x;}

template<class T, class T1>inline void gn(T &x, T1 &y) {gn(x); gn(y);}

template<class T, class T1, class T2>inline void gn(T &x, T1 &y, T2 &z) {gn(x); gn(y); gn(z);}

template<typename T> inline void print(T x) {if (x<0) {putchar('-');return print(-x);}if (x<10) {putchar('0'+x);return;} print(x/10);putchar(x%10+'0');}

template<typename T> inline void println(T x) {print(x), putchar('\n');}

template<typename T> inline void printsp(T x) {print(x), putchar(' ');}

template<class T, class T1> inline void print(T x, T1 y) {printsp(x), println(y);}

template<class T, class T1, class T2> inline void print(T x, T1 y, T2 z) {printsp(x), printsp(y), println(z);}

int power(int a, int b, int m, int ans=1) {

	for (; b; b>>=1, a=1LL*a*a%m) if (b&1) ans=1LL*ans*a%m;

	return ans;

}

#define NN 1111111

char s[NN];

int main() {

#ifndef ONLINE_JUDGE

	freopen("in.in", "r", stdin);

	freopen("out.out", "w", stdout);

#endif

	scanf("%s", s);

	int n=strlen(s);

	int m=(n+2)/3;

	for(int i=m; i<=n/2; i++){

		int r=n-i;

		if(i>1 && s[r]=='0') continue;

		if(r>i && !(r-i>1 && s[i]=='0' || i>1 && s[0]=='0') && s[0]<=s[r]){

			int a=i;

			int b=r-i;

			int c=0, ok=1, up=0;

			for(int j=0; j<i && ok; j++){

				int v1=(j<a ? s[i-j-1]-'0' : 0);

				int v2=(j<b ? s[r-j-1]-'0' : 0);

				if((v1+v2+up)%10!=s[n-j-1]-'0') ok=0;

				up=(v1+v2+up)/10;

			}

			if(ok && !up){

				for(int j=0; j<i; j++) putchar(s[j]);

				putchar('+');

				for(int j=i; j<r; j++) putchar(s[j]);

				putchar('=');

				for(int j=r; j<n; j++) putchar(s[j]);

				puts("");

				return 0;

			}

		}

		if(r>i && !(i>1 && s[r-i]=='0' || r-i>1 && s[0]=='0') && s[r-i]<=s[r]){

			int a=r-i;

			int b=i;

			int c=0, ok=1, up=0;

			for(int j=0; j<i && ok; j++){

				int v1=(j<a ? s[r-i-j-1]-'0' : 0);

				int v2=(j<b ? s[r-j-1]-'0' : 0);

				if((v1+v2+up)%10!=s[n-j-1]-'0') ok=0;

				up=(v1+v2+up)/10;

			}

			if(ok && !up){

				for(int j=0; j<r-i; j++) putchar(s[j]);

				putchar('+');

				for(int j=r-i; j<r; j++) putchar(s[j]);

				putchar('=');

				for(int j=r; j<n; j++) putchar(s[j]);

				puts("");

				return 0;

			}

		}

		if(i>1 && r-i+1<i && !(r-i+1>1 && s[i-1]=='0' || i-1>1 && s[0]=='0') && s[r]=='1'){

			int a=i-1;

			int b=r-i+1;

			int c=0, ok=1, up=0;

			for(int j=0; j<i && ok; j++){

				int v1=(j<a ? s[i-j-2]-'0' : 0);

				int v2=(j<b ? s[r-j-1]-'0' : 0);

				if((v1+v2+up)%10!=s[n-j-1]-'0') ok=0;

				up=(v1+v2+up)/10;

			}

			if(ok && !up){

				for(int j=0; j<i-1; j++) putchar(s[j]);

				putchar('+');

				for(int j=i-1; j<r; j++) putchar(s[j]);

				putchar('=');

				for(int j=r; j<n; j++) putchar(s[j]);

				puts("");

				return 0;

			}

		}

		if(i>1 && r-i+1<i && !(i-1>1 && s[r-i+1]=='0' || r-i+1>1 && s[0]=='0') && s[r]=='1'){

			int a=r-i+1;

			int b=i-1;

			int c=0, ok=1, up=0;

			for(int j=0; j<i && ok; j++){

				int v1=(j<a ? s[r-i-j]-'0' : 0);

				int v2=(j<b ? s[r-j-1]-'0' : 0);

				if((v1+v2+up)%10!=s[n-j-1]-'0') ok=0;

				up=(v1+v2+up)/10;

			}

			if(ok && !up){

				for(int j=0; j<r-i+1; j++) putchar(s[j]);

				putchar('+');

				for(int j=r-i+1; j<r; j++) putchar(s[j]);

				putchar('=');

				for(int j=r; j<n; j++) putchar(s[j]);

				puts("");

				return 0;

			}

		}

	}

	return 0;

}


#include <bits/stdc++.h>

using namespace std;

typedef pair<int, int> pii;

#define x first

#define y second

#define mp make_pair

#define NN 1000010

#define mod1 82709991

int p1[NN], p2[NN], q1[NN], q2[NN];

char str[NN];

int len;

void pre() {

	p1[0]=p2[0]=1;

	q1[0]=q2[0]=0;

	for (int i=1; i<NN; i++) p1[i]=p1[i-1]*10%mod1;

}

int calc(int l, int r) {

	int ans1=(q1[r]-1LL*q1[l-1]*p1[r-l+1]%mod1+mod1)%mod1;

	return ans1;

}

bool can(int l, int r) {

	if (!l) return 0;

	if (len-r-l<=0) return 0;

	if (str[len-r+1]=='0' && r>1) return 0;

	if (str[l+1]=='0' && len-r-l>1) return 0;

	if (str[1]=='0' && l>1) return 0;

	if (l>r) return 0;

	if (len-l-r>r) return 0;

	int s1=calc(1, l);

	int s2=calc(l+1, len-r);

	int s3=calc(len-r+1, len);

	int s=(s1+s2)%mod1;

	return s==s3;

}

int main() {

#ifndef ONLINE_JUDGE

	freopen("in.in", "r", stdin);

#endif

	pre();

	scanf("%s", str+1);

	len=strlen(str+1);

	for (int i=1; i<=len; i++) {

		q1[i]=(q1[i-1]*10+str[i]-'0')%mod1;

	}

	int fr, se;

	for (int i=1; i<len; i++) {

		if (can(i, i)) {fr=i, se=i; break;}

		if (can(len-i-i, i)) {fr=len-i-i, se=i; break;}

		if (can(i-1, i)) {fr=i-1, se=i; break;}

		if (can(len-i-i+1, i)) {fr=len-i-i+1, se=i; break;}

	}

	for (int i=1; i<=len; i++) {

		putchar(str[i]);

		if (fr==i) putchar('+');

		if (i==len-se) putchar('=');

	}

	return 0;

}


#include <bits/stdc++.h>

#define x first

#define y second

#define eps 1e-9

#define pb push_back

#define inf 0x3f3f3f3f

#define mod 82709991

#define sq(_) ((_)*(_))

#define cb(_) ((_)*(_)*(_))

#define bit(x, y) (((x)>>(y))&1)

#define bctz(x) (__builtin_ctz(x))

#define bclz(x) (__builtin_clz(x))

#define bctzl(x) (__builtin_ctzll(x))

#define bclzl(x) (__builtin_clzll(x))

#define bpt(x) (__builtin_popcount(x))

#define bptl(x) (__builtin_popcountll(x))

#define PQ priority_queue<pii, vector<pii>, greater<pii> >

using namespace std;

typedef double DO;

typedef long long INT;

typedef vector<int> VI;

typedef pair<int, int> pii;

typedef pair<pii, int> pi3;

template<typename T, typename U> inline void smin(T &a, U b) {if (a>b) a=b;}

template<typename T, typename U> inline void smax(T &a, U b) {if (a<b) a=b;}

template<class T> inline void gn(T &x) {char c, sg=0; while (c=getchar(), (c>'9' || c<'0') && c!='-');for((c=='-'?sg=1, c=getchar():0), x=0; c>='0' && c<='9'; c=getchar()) x=(x<<1)+(x<<3)+c-'0';if (sg) x=-x;}

template<class T1, class T2> inline void gn(T1 &x1, T2 &x2) {gn(x1), gn(x2);}

template<class T1, class T2, class T3> inline void gn(T1 &x1, T2 &x2, T3 &x3) {gn(x1), gn(x2), gn(x3);}

template<class T1, class T2, class T3, class T4> inline void gn(T1 &x1, T2 &x2, T3 &x3, T4 &x4) {gn(x1), gn(x2), gn(x3), gn(x4);}

template<class T> inline void print(T x) {if (x<0) {putchar('-');return print(-x);}if (x<10) {putchar('0'+x);return;} print(x/10);putchar(x%10+'0');}

template<class T> inline void printsp(T x) {print(x); putchar(' ');}

template<class T> inline void println(T x) {print(x); putchar('\n');}

template<class T1, class T2> inline void print(T1 x1, T2 x2){printsp(x1), println(x2);}

template<class T1, class T2, class T3> inline void print(T1 x1, T2 x2, T3 x3){printsp(x1), printsp(x2), println(x3);}

template<class T1, class T2, class T3, class T4> inline void print(T1 x1, T2 x2, T3 x3, T4 x4){printsp(x1), printsp(x2), printsp(x3), println(x4);}

int power(int a, int b, int m, int ans=1) {

	for (; b; b>>=1, a=1LL*a*a%m) if (b&1) ans=1LL*ans*a%m;

	return ans;

}

#ifndef ONLINE_JUDGE

void debug() {cout << endl;}

template<typename T, typename... Args>void debug(T&& head, Args&&... tail) {cout << head << ' ';debug(tail...);}

#endif

#define NN 1000010

char s[NN];

int n, h[NN];

void pre() {

	n=strlen(s+1);

	for(int i=1; i<=n; i++) {

		h[i]=(h[i-1]*10+s[i]-'0')%mod;

	}

}

int calc(int st, int ed) {

	return (1LL*h[st-1]*power(10, ed-st+1, mod)-h[ed]+mod)%mod;

}

void Gameover(int a, int b) {

	for(int i=1; i<a; i++) putchar(s[i]); putchar('+');

	for(int i=a; i<b; i++) putchar(s[i]); putchar('=');

	for(int i=b; i<=n; i++) putchar(s[i]);

	exit(0);

}

void test(int a, int b) {

	if(a>0 and a<b and (calc(1, a)+calc(a+1, b))%mod==calc(b+1, n)) {

		if(s[a+1]>'0' or a+1==b) Gameover(a+1, b+1);

	}

}

void left(int id) {

	test(n-id, id-1);

	test(n-id+1, id-1);

}

void right(int id) {

	test(2*id-n-1, id-1);

	test(2*id-n-2, id-1);

}

int main() {

#ifndef ONLINE_JUDGE

	freopen("in.in", "r", stdin);

	freopen("out.out", "w", stdout);

#endif

	scanf("%s", s+1);

	pre();

	for(int i=(n+3)/2; i<2*n+4; i++) if(s[i]>'0') {

		left(i);

		right(i);

	}

}


#include <bits/stdc++.h>

#define x first

#define y second

#define eps 1e-9

#define pb push_back

#define inf 0x3f3f3f3f

#define mod 8279991

#define sq(_) ((_)*(_))

#define cb(_) ((_)*(_)*(_))

#define bit(x, y) (((x)>>(y))&1)

#define bctz(x) (__builtin_ctz(x))

#define bclz(x) (__builtin_clz(x))

#define bctzl(x) (__builtin_ctzll(x))

#define bclzl(x) (__builtin_clzll(x))

#define bpt(x) (__builtin_popcount(x))

#define bptl(x) (__builtin_popcountll(x))

#define PQ priority_queue<pii, vector<pii>, greater<pii> >

using namespace std;

typedef double DO;

typedef long long INT;

typedef vector<int> VI;

typedef pair<int, int> pii;

typedef pair<pii, int> pi3;

template<typename T, typename U> inline void smin(T &a, U b) {if (a>b) a=b;}

template<typename T, typename U> inline void smax(T &a, U b) {if (a<b) a=b;}

template<class T> inline void gn(T &x) {char c, sg=0; while (c=getchar(), (c>'9' || c<'0') && c!='-');for((c=='-'?sg=1, c=getchar():0), x=0; c>='0' && c<='9'; c=getchar()) x=(x<<1)+(x<<3)+c-'0';if (sg) x=-x;}

template<class T1, class T2> inline void gn(T1 &x1, T2 &x2) {gn(x1), gn(x2);}

template<class T1, class T2, class T3> inline void gn(T1 &x1, T2 &x2, T3 &x3) {gn(x1), gn(x2), gn(x3);}

template<class T1, class T2, class T3, class T4> inline void gn(T1 &x1, T2 &x2, T3 &x3, T4 &x4) {gn(x1), gn(x2), gn(x3), gn(x4);}

template<class T> inline void print(T x) {if (x<0) {putchar('-');return print(-x);}if (x<10) {putchar('0'+x);return;} print(x/10);putchar(x%10+'0');}

template<class T> inline void printsp(T x) {print(x); putchar(' ');}

template<class T> inline void println(T x) {print(x); putchar('\n');}

template<class T1, class T2> inline void print(T1 x1, T2 x2){printsp(x1), println(x2);}

template<class T1, class T2, class T3> inline void print(T1 x1, T2 x2, T3 x3){printsp(x1), printsp(x2), println(x3);}

template<class T1, class T2, class T3, class T4> inline void print(T1 x1, T2 x2, T3 x3, T4 x4){printsp(x1), printsp(x2), printsp(x3), println(x4);}

int power(int a, int b, int m, int ans=1) {

	for (; b; b>>=1, a=1LL*a*a%m) if (b&1) ans=1LL*ans*a%m;

	return ans;

}

#ifndef ONLINE_JUDGE

void debug() {cout << endl;}

template<typename T, typename... Args>void debug(T&& head, Args&&... tail) {cout << head << ' ';debug(tail...);}

#endif

#define NN 1000010

char s[NN];

int n, h[NN];

void pre() {

	n=strlen(s+1);

	for(int i=1; i<=n; i++) {

		h[i]=(h[i-1]*10+s[i]-'0')%mod;

	}

}

int calc(int st, int ed) {

	return (1LL*h[st-1]*power(10, ed-st+1, mod)-h[ed]+mod)%mod;

}

void Gameover(int a, int b) {

	for(int i=1; i<a; i++) putchar(s[i]); putchar('+');

	for(int i=a; i<b; i++) putchar(s[i]); putchar('=');

	for(int i=b; i<=n; i++) putchar(s[i]);

	exit(0);

}

void test(int a, int b) {

	if(a>0 and a<b and (calc(1, a)+calc(a+1, b))%mod==calc(b+1, n)) {

		if(s[a+1]>'0' or a+1==b) Gameover(a+1, b+1);

	}

}

void left(int id) {

	test(n-id, id-1);

	test(n-id+1, id-1);

}

void right(int id) {

	test(2*id-n-1, id-1);

	test(2*id-n-2, id-1);

}

int main() {

#ifndef ONLINE_JUDGE

	freopen("in.in", "r", stdin);

	freopen("out.out", "w", stdout);

#endif

	scanf("%s", s+1);

	pre();

	for(int i=(n+3)/2; 3*i<2*n+4; i++) if(s[i]>'0' or i==n) {

		left(i);

		right(i);

	}

}


#include <bits/stdc++.h>

#define x first

#define y second

#define eps 1e-9

#define pb push_back

#define inf 0x3f3f3f3f

#define mod 313991

#define sq(_) ((_)*(_))

#define cb(_) ((_)*(_)*(_))

#define bit(x, y) (((x)>>(y))&1)

#define bctz(x) (__builtin_ctz(x))

#define bclz(x) (__builtin_clz(x))

#define bctzl(x) (__builtin_ctzll(x))

#define bclzl(x) (__builtin_clzll(x))

#define bpt(x) (__builtin_popcount(x))

#define bptl(x) (__builtin_popcountll(x))

#define PQ priority_queue<pii, vector<pii>, greater<pii> >

using namespace std;

typedef double DO;

typedef long long INT;

typedef vector<int> VI;

typedef pair<int, int> pii;

typedef pair<pii, int> pi3;

template<typename T, typename U> inline void smin(T &a, U b) {if (a>b) a=b;}

template<typename T, typename U> inline void smax(T &a, U b) {if (a<b) a=b;}

template<class T> inline void gn(T &x) {char c, sg=0; while (c=getchar(), (c>'9' || c<'0') && c!='-');for((c=='-'?sg=1, c=getchar():0), x=0; c>='0' && c<='9'; c=getchar()) x=(x<<1)+(x<<3)+c-'0';if (sg) x=-x;}

template<class T1, class T2> inline void gn(T1 &x1, T2 &x2) {gn(x1), gn(x2);}

template<class T1, class T2, class T3> inline void gn(T1 &x1, T2 &x2, T3 &x3) {gn(x1), gn(x2), gn(x3);}

template<class T1, class T2, class T3, class T4> inline void gn(T1 &x1, T2 &x2, T3 &x3, T4 &x4) {gn(x1), gn(x2), gn(x3), gn(x4);}

template<class T> inline void print(T x) {if (x<0) {putchar('-');return print(-x);}if (x<10) {putchar('0'+x);return;} print(x/10);putchar(x%10+'0');}

template<class T> inline void printsp(T x) {print(x); putchar(' ');}

template<class T> inline void println(T x) {print(x); putchar('\n');}

template<class T1, class T2> inline void print(T1 x1, T2 x2){printsp(x1), println(x2);}

template<class T1, class T2, class T3> inline void print(T1 x1, T2 x2, T3 x3){printsp(x1), printsp(x2), println(x3);}

template<class T1, class T2, class T3, class T4> inline void print(T1 x1, T2 x2, T3 x3, T4 x4){printsp(x1), printsp(x2), printsp(x3), println(x4);}

int power(int a, int b, int m, int ans=1) {

	for (; b; b>>=1, a=1LL*a*a%m) if (b&1) ans=1LL*ans*a%m;

	return ans;

}

#ifndef ONLINE_JUDGE

void debug() {cout << endl;}

template<typename T, typename... Args>void debug(T&& head, Args&&... tail) {cout << head << ' ';debug(tail...);}

#endif

#define NN 1000010

char s[NN];

int n, h[NN];

void pre() {

	n=strlen(s+1);

	for(int i=1; i<=n; i++) {

		h[i]=(h[i-1]*10+s[i]-'0')%mod;

	}

}

int calc(int st, int ed) {

	return (1LL*h[st-1]*power(10, ed-st+1, mod)-h[ed]+mod)%mod;

}

void Gameover(int a, int b) {

	for(int i=1; i<a; i++) putchar(s[i]); putchar('+');

	for(int i=a; i<b; i++) putchar(s[i]); putchar('=');

	for(int i=b; i<=n; i++) putchar(s[i]);

	exit(0);

}

void test(int a, int b) {

	if(a>0 and a<b and (calc(1, a)+calc(a+1, b))%mod==calc(b+1, n)) {

		if(s[a+1]>'0' or a+1==b) Gameover(a+1, b+1);

	}

}

void left(int id) {

	test(n-id, id-1);

	test(n-id+1, id-1);

}

void right(int id) {

	test(2*id-n-1, id-1);

	test(2*id-n-2, id-1);

}

int main() {

#ifndef ONLINE_JUDGE

	freopen("in.in", "r", stdin);

	freopen("out.out", "w", stdout);

#endif

	scanf("%s", s+1);

	pre();

	for(int i=(n+3)/2; 3*i<2*n+4; i++) if(s[i]>'0' or i==n) {

		left(i);

		right(i);

	}

}


#include <bits/stdc++.h>

#define x first

#define y second

#define eps 1e-9

#define pb push_back

#define inf 0x3f3f3f3f

#define mod 82709991

#define Mod 3103991

#define sq(_) ((_)*(_))

#define cb(_) ((_)*(_)*(_))

#define bit(x, y) (((x)>>(y))&1)

#define bctz(x) (__builtin_ctz(x))

#define bclz(x) (__builtin_clz(x))

#define bctzl(x) (__builtin_ctzll(x))

#define bclzl(x) (__builtin_clzll(x))

#define bpt(x) (__builtin_popcount(x))

#define bptl(x) (__builtin_popcountll(x))

#define PQ priority_queue<pii, vector<pii>, greater<pii> >

using namespace std;

typedef double DO;

typedef long long INT;

typedef vector<int> VI;

typedef pair<int, int> pii;

typedef pair<pii, int> pi3;

template<typename T, typename U> inline void smin(T &a, U b) {if (a>b) a=b;}

template<typename T, typename U> inline void smax(T &a, U b) {if (a<b) a=b;}

template<class T> inline void gn(T &x) {char c, sg=0; while (c=getchar(), (c>'9' || c<'0') && c!='-');for((c=='-'?sg=1, c=getchar():0), x=0; c>='0' && c<='9'; c=getchar()) x=(x<<1)+(x<<3)+c-'0';if (sg) x=-x;}

template<class T1, class T2> inline void gn(T1 &x1, T2 &x2) {gn(x1), gn(x2);}

template<class T1, class T2, class T3> inline void gn(T1 &x1, T2 &x2, T3 &x3) {gn(x1), gn(x2), gn(x3);}

template<class T1, class T2, class T3, class T4> inline void gn(T1 &x1, T2 &x2, T3 &x3, T4 &x4) {gn(x1), gn(x2), gn(x3), gn(x4);}

template<class T> inline void print(T x) {if (x<0) {putchar('-');return print(-x);}if (x<10) {putchar('0'+x);return;} print(x/10);putchar(x%10+'0');}

template<class T> inline void printsp(T x) {print(x); putchar(' ');}

template<class T> inline void println(T x) {print(x); putchar('\n');}

template<class T1, class T2> inline void print(T1 x1, T2 x2){printsp(x1), println(x2);}

template<class T1, class T2, class T3> inline void print(T1 x1, T2 x2, T3 x3){printsp(x1), printsp(x2), println(x3);}

template<class T1, class T2, class T3, class T4> inline void print(T1 x1, T2 x2, T3 x3, T4 x4){printsp(x1), printsp(x2), printsp(x3), println(x4);}

int power(int a, int b, int m, int ans=1) {

	for (; b; b>>=1, a=1LL*a*a%m) if (b&1) ans=1LL*ans*a%m;

	return ans;

}

#ifndef ONLINE_JUDGE

void debug() {cout << endl;}

template<typename T, typename... Args>void debug(T&& head, Args&&... tail) {cout << head << ' ';debug(tail...);}

#endif

#define NN 1000010

char s[NN];

int n, h[NN], H[NN];

void pre() {

	n=strlen(s+1);

	for(int i=1; i<=n; i++) {

		h[i]=(h[i-1]*10+s[i]-'0')%mod;

		H[i]=(H[i-1]*10+s[i]-'0')%Mod;

	}

}

int calc(int st, int ed) {

	return (1LL*h[st-1]*power(10, ed-st+1, mod)-h[ed]+mod)%mod;

}

int Calc(int st, int ed) {

	return (1LL*H[st-1]*power(10, ed-st+1, Mod)-H[ed]+Mod)%Mod;

}

void Gameover(int a, int b) {

	for(int i=1; i<a; i++) putchar(s[i]); putchar('+');

	for(int i=a; i<b; i++) putchar(s[i]); putchar('=');

	for(int i=b; i<=n; i++) putchar(s[i]);

	exit(0);

}

void test(int a, int b) {

	if(a>0 and a<b and (calc(1, a)+calc(a+1, b))%mod==calc(b+1, n)) {

		if(s[a+1]>'0' or a+1==b) {

			if((Calc(1, a)+Calc(a+1, b))%Mod==Calc(b+1, n)) {

				Gameover(a+1, b+1);

			}

		}

	}

}

void left(int id) {

	test(n-id, id-1);

	test(n-id+1, id-1);

}

void right(int id) {

	test(2*id-n-1, id-1);

	test(2*id-n-2, id-1);

}

int main() {

#ifndef ONLINE_JUDGE

	freopen("in.in", "r", stdin);

	freopen("out.out", "w", stdout);

#endif

	scanf("%s", s+1);

	pre();

	for(int i=(n+3)/2; 3*i<2*n+4; i++) if(s[i]>'0' or i==n) {

		left(i);

		right(i);

	}

}


#include <bits/stdc++.h>

#define inf 0x3f3f3f3f

#define INF 0x3f3f3f3f3f3f3f3fLL

#define pb push_back

#define sq(x) ((x)*(x))

#define SZ(a) ((int)a.size())

#define x first

#define y second

#define eps 1e-8

#define bpt(x) (__builtin_popcount(x))

#define bptl(x) (__builtin_popcountll(x))

#define bit(x, y) (((x)>>(y))&1)

#define bclz(x) (__builtin_clz(x))

#define bclzl(x) (__builtin_clzll(x))

#define bctz(x) (__builtin_ctz(x))

#define bctzl(x) (__builtin_ctzll(x))

#define rands(n) (rand()%n+1)

#define rand0(n) (rands(n)-1)

#define Rands(n) ((INT)rand()*rand()%n+1)

#define Rand0(n) (Rands(n)-1)

#define PQ priority_queue<pii, vector<pii>, greater<pii> >

#define rep(i, a, b) for(int i=a; i<b; i++)

#define eprintf(...) fprintf(stderr, __VA_ARGS__)

#define shit(a) (1 << (a))

using namespace std;

typedef unsigned long long INT;

typedef vector<int> VI;

typedef pair<int, int> pii;

typedef pair<INT, INT> PII;

typedef pair<pii, int> ppi;

typedef double DO;

template<typename T, typename U> inline void smin(T &a, U b) {if (a>b) a=b;}

template<typename T, typename U> inline void smax(T &a, U b) {if (a<b) a=b;}

template<class T>inline void gn(T &x) {char c, sg=0; while (c=getchar(), (c>'9' || c<'0') && c!='-');for((c=='-'?sg=1, c=getchar():0), x=0; c>='0' && c<='9'; c=getchar()) x=(x<<1)+(x<<3)+c-'0';if (sg) x=-x;}

template<class T>inline void print(T x) {if (x<0) {putchar('-');return print(-x);}if (x<10) {putchar('0'+x);return;} print(x/10);putchar(x%10+'0');}

int power(int a, int b, int m, int ans=1) {

	for (; b; b>>=1, a=1LL*a*a%m) if (b&1) ans=1LL*ans*a%m;

	return ans;

}

#if ( ( _WIN32 || __WIN32__ ) && __cplusplus < 201103L)

    #define lld "%I64d"

#else

    #define lld "%lld"

#endif

#define NN 1000011

char s[NN];

int h[2][NN];

int pw[2][NN];

int mod[2]={10000007, 9238477};

int get(int st, int ed, int k) {

	return (h[k][ed] - (INT)(st ? h[k][st-1] : 0) * pw[k][ed-st+1] % mod[k] + mod[k]) % mod[k];

}

bool check(int n, int ansp, int anse) {

//	for(int i=0; i<=ansp; i++) cout <<s[i]; cout <<' ';

//	for(int i=ansp+1; i<=anse; i++) cout << s[i]; cout <<' ';

//	for(int i=anse+1; i<n; i++) cout <<s[i] ; puts("");

	if(ansp == anse) return 0;

	if(s[ansp+1] =='0' and anse-ansp > 1) return 0;

	for(int i=0; i<2; i++) {

		if((get(0, ansp, i) + get(ansp+1, anse, i)) % mod[i] != get(anse+1, n-1, i)) return 0;

	}

	cout << anse<<endl;

	return 1;

}

int main(){

#ifndef ONLINE_JUDGE

	freopen("in.in", "r", stdin);

	freopen("out.out", "w", stdout);

	int _time=clock();

#endif

	scanf("%s", s);

	int n = strlen(s);

	if(s[0] == '0') {

		cout <<"0+";

		for(int i=1; i<=n/2; i++) putchar(s[i]);

		putchar('=');

		for(int i=n/2+1; i<n; i++) putchar(s[i]);

		puts("");

		return 0;

	}

	h[0][0] = h[1][0] = s[0]-'0'; pw[0][0] = pw[1][0] =1;

	for(int i=1; i<n; i++) {

		h[0][i] = (h[0][i-1] * 10 + s[i] -'0') % mod[0];

		h[1][i] = (h[1][i-1] * 10 + s[i] -'0') % mod[1];

		pw[0][i] = pw[0][i-1] * 10 % mod[0];

		pw[1][i] = pw[1][i-1] * 10 % mod[1];

	}

	int ansp = -1, anse = -1;

	for(int i=0; i<n; i++) {

		int re = n - i - 1;

		int ed = re / 2 + i;

		int len = re / 2;

		if(re / 2 > i + 1) {

			if(s[i+1] == '0' and len > 1) continue;

			if(check(n, i, ed) == 0) continue;

			ansp=i, anse = ed;

			break;

		}

		else {

			if(re <= i + 1) continue;

			ed = n - i - 2;

			if(check(n, i, ed)) {ansp = i, anse = ed; break;}

			if(check(n, i, ed-1)) {ansp = i, anse = ed; break;}

		}

	}

	if(ansp == -1) int *a= new int[111111111];

	for(int i=0; i<=ansp; i++) cout<<s[i];

	putchar('+');

	for(int i=ansp+1; i<=anse; i++) cout <<s[i];

	putchar('=');

	for(int i=anse+1; i <n; i++) cout <<s[i];

	puts("");

#ifndef ONLINE_JUDGE

	cerr<<"The running time is : " << (DO)(clock()-_time) / 1000<<endl;

#endif

	return 0;

}


#include <bits/stdc++.h>

#define x first

#define y second

#define eps 1e-9

#define pb push_back

#define inf 0x3f3f3f3f

#define mod 82709991

#define Mod 3103991

#define sq(_) ((_)*(_))

#define cb(_) ((_)*(_)*(_))

#define bit(x, y) (((x)>>(y))&1)

#define bctz(x) (__builtin_ctz(x))

#define bclz(x) (__builtin_clz(x))

#define bctzl(x) (__builtin_ctzll(x))

#define bclzl(x) (__builtin_clzll(x))

#define bpt(x) (__builtin_popcount(x))

#define bptl(x) (__builtin_popcountll(x))

#define PQ priority_queue<pii, vector<pii>, greater<pii> >

using namespace std;

typedef double DO;

typedef long long INT;

typedef vector<int> VI;

typedef pair<int, int> pii;

typedef pair<pii, int> pi3;

template<typename T, typename U> inline void smin(T &a, U b) {if (a>b) a=b;}

template<typename T, typename U> inline void smax(T &a, U b) {if (a<b) a=b;}

template<class T> inline void gn(T &x) {char c, sg=0; while (c=getchar(), (c>'9' || c<'0') && c!='-');for((c=='-'?sg=1, c=getchar():0), x=0; c>='0' && c<='9'; c=getchar()) x=(x<<1)+(x<<3)+c-'0';if (sg) x=-x;}

template<class T1, class T2> inline void gn(T1 &x1, T2 &x2) {gn(x1), gn(x2);}

template<class T1, class T2, class T3> inline void gn(T1 &x1, T2 &x2, T3 &x3) {gn(x1), gn(x2), gn(x3);}

template<class T1, class T2, class T3, class T4> inline void gn(T1 &x1, T2 &x2, T3 &x3, T4 &x4) {gn(x1), gn(x2), gn(x3), gn(x4);}

template<class T> inline void print(T x) {if (x<0) {putchar('-');return print(-x);}if (x<10) {putchar('0'+x);return;} print(x/10);putchar(x%10+'0');}

template<class T> inline void printsp(T x) {print(x); putchar(' ');}

template<class T> inline void println(T x) {print(x); putchar('\n');}

template<class T1, class T2> inline void print(T1 x1, T2 x2){printsp(x1), println(x2);}

template<class T1, class T2, class T3> inline void print(T1 x1, T2 x2, T3 x3){printsp(x1), printsp(x2), println(x3);}

template<class T1, class T2, class T3, class T4> inline void print(T1 x1, T2 x2, T3 x3, T4 x4){printsp(x1), printsp(x2), printsp(x3), println(x4);}

int power(int a, int b, int m, int ans=1) {

	for (; b; b>>=1, a=1LL*a*a%m) if (b&1) ans=1LL*ans*a%m;

	return ans;

}

#ifndef ONLINE_JUDGE

void debug() {cout << endl;}

template<typename T, typename... Args>void debug(T&& head, Args&&... tail) {cout << head << ' ';debug(tail...);}

#endif

#define NN 1000010

char s[NN];

int n, h[NN], H[NN];

void pre() {

	n=strlen(s+1);

	for(int i=1; i<=n; i++) {

		h[i]=(h[i-1]*10+s[i]-'0')%mod;

		H[i]=(H[i-1]*10+s[i]-'0')%Mod;

	}

}

int calc(int st, int ed) {

	return (1LL*h[st-1]*power(10, ed-st+1, mod)-h[ed]+mod)%mod;

}

int Calc(int st, int ed) {

	return (1LL*H[st-1]*power(10, ed-st+1, Mod)-H[ed]+Mod)%Mod;

}

void Gameover(int a, int b) {

	for(int i=1; i<a; i++) putchar(s[i]); putchar('+');

	for(int i=a; i<b; i++) putchar(s[i]); putchar('=');

	for(int i=b; i<=n; i++) putchar(s[i]);

	exit(0);

}

void test(int a, int b) {

	if(a>0 and a<b and (calc(1, a)+calc(a+1, b))%mod==calc(b+1, n)) {

		if(s[a+1]>'0' or a+1==b) {

			if((Calc(1, a)+Calc(a+1, b))%Mod==Calc(b+1, n)) {

				Gameover(a+1, b+1);

			}

		}

	}

}

void left(int id) {

	test(n-id, id-1);

	test(n-id+1, id-1);

}

void right(int id) {

	test(2*id-n-1, id-1);

	test(2*id-n-2, id-1);

}

int main() {

#ifndef ONLINE_JUDGE

	freopen("in.in", "r", stdin);

	freopen("out.out", "w", stdout);

#endif

	scanf("%s", s+1);

	pre();

	for(int i=(n+3)/2; 3*i<2*n+4; i++) if(s[i]>'0') {

		left(i);

		right(i);

	}

}


#include <bits/stdc++.h>

using namespace std;

typedef pair<int, int> pii;

#define x first

#define y second

#define mp make_pair

#define NN 1000010

#define mod1 1999728

int p1[NN], p2[NN], q1[NN], q2[NN];

char str[NN];

int len;

void pre() {

	p1[0]=p2[0]=1;

	q1[0]=q2[0]=0;

	for (int i=1; i<NN; i++) p1[i]=p1[i-1]*10%mod1;

}

int calc(int l, int r) {

	int ans1=(q1[r]-1LL*q1[l-1]*p1[r-l+1]%mod1+mod1)%mod1;

	return ans1;

}

bool can(int l, int r) {

	if (!l) return 0;

	if (len-r-l<=0) return 0;

	if (str[len-r+1]=='0' && r>1) return 0;

	if (str[l+1]=='0' && len-r-l>1) return 0;

	if (str[1]=='0' && l>1) return 0;

	if (l>r) return 0;

	if (len-l-r>r) return 0;

	int s1=calc(1, l);

	int s2=calc(l+1, len-r);

	int s3=calc(len-r+1, len);

	int s=(s1+s2)%mod1;

	return s==s3;

}

int main() {

#ifndef ONLINE_JUDGE

	freopen("in.in", "r", stdin);

#endif

	pre();

	scanf("%s", str+1);

	len=strlen(str+1);

	for (int i=1; i<=len; i++) {

		q1[i]=(q1[i-1]*10+str[i]-'0')%mod1;

	}

	int fr, se;

	for (int i=1; i<len; i++) {

		if (can(i, i)) {fr=i, se=i; break;}

		if (can(len-i-i, i)) {fr=len-i-i, se=i; break;}

		if (can(i-1, i)) {fr=i-1, se=i; break;}

		if (can(len-i-i+1, i)) {fr=len-i-i+1, se=i; break;}

	}

	for (int i=1; i<=len; i++) {

		putchar(str[i]);

		if (fr==i) putchar('+');

		if (i==len-se) putchar('=');

	}

	return 0;

}


#include <bits/stdc++.h>

#define x first

#define y second

#define eps 1e-9

#define pb push_back

#define inf 0x3f3f3f3f

#define mod 8279991

#define sq(_) ((_)*(_))

#define cb(_) ((_)*(_)*(_))

#define bit(x, y) (((x)>>(y))&1)

#define bctz(x) (__builtin_ctz(x))

#define bclz(x) (__builtin_clz(x))

#define bctzl(x) (__builtin_ctzll(x))

#define bclzl(x) (__builtin_clzll(x))

#define bpt(x) (__builtin_popcount(x))

#define bptl(x) (__builtin_popcountll(x))

#define PQ priority_queue<pii, vector<pii>, greater<pii> >

using namespace std;

typedef double DO;

typedef long long INT;

typedef vector<int> VI;

typedef pair<int, int> pii;

typedef pair<pii, int> pi3;

template<typename T, typename U> inline void smin(T &a, U b) {if (a>b) a=b;}

template<typename T, typename U> inline void smax(T &a, U b) {if (a<b) a=b;}

template<class T> inline void gn(T &x) {char c, sg=0; while (c=getchar(), (c>'9' || c<'0') && c!='-');for((c=='-'?sg=1, c=getchar():0), x=0; c>='0' && c<='9'; c=getchar()) x=(x<<1)+(x<<3)+c-'0';if (sg) x=-x;}

template<class T1, class T2> inline void gn(T1 &x1, T2 &x2) {gn(x1), gn(x2);}

template<class T1, class T2, class T3> inline void gn(T1 &x1, T2 &x2, T3 &x3) {gn(x1), gn(x2), gn(x3);}

template<class T1, class T2, class T3, class T4> inline void gn(T1 &x1, T2 &x2, T3 &x3, T4 &x4) {gn(x1), gn(x2), gn(x3), gn(x4);}

template<class T> inline void print(T x) {if (x<0) {putchar('-');return print(-x);}if (x<10) {putchar('0'+x);return;} print(x/10);putchar(x%10+'0');}

template<class T> inline void printsp(T x) {print(x); putchar(' ');}

template<class T> inline void println(T x) {print(x); putchar('\n');}

template<class T1, class T2> inline void print(T1 x1, T2 x2){printsp(x1), println(x2);}

template<class T1, class T2, class T3> inline void print(T1 x1, T2 x2, T3 x3){printsp(x1), printsp(x2), println(x3);}

template<class T1, class T2, class T3, class T4> inline void print(T1 x1, T2 x2, T3 x3, T4 x4){printsp(x1), printsp(x2), printsp(x3), println(x4);}

int power(int a, int b, int m, int ans=1) {

	for (; b; b>>=1, a=1LL*a*a%m) if (b&1) ans=1LL*ans*a%m;

	return ans;

}

#ifndef ONLINE_JUDGE

void debug() {cout << endl;}

template<typename T, typename... Args>void debug(T&& head, Args&&... tail) {cout << head << ' ';debug(tail...);}

#endif

#define NN 1000010

char s[NN];

int n, h[NN];

void pre() {

	n=strlen(s+1);

	for(int i=1; i<=n; i++) {

		h[i]=(h[i-1]*10+s[i]-'0')%mod;

	}

}

int calc(int st, int ed) {

	return (1LL*h[st-1]*power(10, ed-st+1, mod)-h[ed]+mod)%mod;

}

void Gameover(int a, int b) {

	for(int i=1; i<a; i++) putchar(s[i]); putchar('+');

	for(int i=a; i<b; i++) putchar(s[i]); putchar('=');

	for(int i=b; i<=n; i++) putchar(s[i]);

	exit(0);

}

void test(int a, int b) {

	if(a>0 and a<b and (calc(1, a)+calc(a+1, b))%mod==calc(b+1, n)) {

		if(s[a+1]>'0' or a+1==b) Gameover(a+1, b+1);

	}

}

void left(int id) {

	test(n-id, id-1);

	test(n-id+1, id-1);

}

void right(int id) {

	test(2*id-n-1, id-1);

	test(2*id-n-2, id-1);

}

int main() {

#ifndef ONLINE_JUDGE

	freopen("in.in", "r", stdin);

	freopen("out.out", "w", stdout);

#endif

	scanf("%s", s+1);

	pre();

	for(int i=(n+3)/2; i<2*n+4; i++) if(s[i]>'0') {

		left(i);

		right(i);

	}

}


#include <bits/stdc++.h>

#define inf 0x3f3f3f3f

#define INF 0x3f3f3f3f3f3f3f3fLL

#define pb push_back

#define sq(x) ((x)*(x))

#define SZ(a) ((int)a.size())

#define x first

#define y second

#define eps 1e-8

#define bpt(x) (__builtin_popcount(x))

#define bptl(x) (__builtin_popcountll(x))

#define bit(x, y) (((x)>>(y))&1)

#define bclz(x) (__builtin_clz(x))

#define bclzl(x) (__builtin_clzll(x))

#define bctz(x) (__builtin_ctz(x))

#define bctzl(x) (__builtin_ctzll(x))

#define rands(n) (rand()%n+1)

#define rand0(n) (rands(n)-1)

#define Rands(n) ((INT)rand()*rand()%n+1)

#define Rand0(n) (Rands(n)-1)

#define PQ priority_queue<pii, vector<pii>, greater<pii> >

#define rep(i, a, b) for(int i=a; i<b; i++)

#define eprintf(...) fprintf(stderr, __VA_ARGS__)

#define shit(a) (1 << (a))

using namespace std;

typedef unsigned long long INT;

typedef vector<int> VI;

typedef pair<int, int> pii;

typedef pair<INT, INT> PII;

typedef pair<pii, int> ppi;

typedef double DO;

template<typename T, typename U> inline void smin(T &a, U b) {if (a>b) a=b;}

template<typename T, typename U> inline void smax(T &a, U b) {if (a<b) a=b;}

template<class T>inline void gn(T &x) {char c, sg=0; while (c=getchar(), (c>'9' || c<'0') && c!='-');for((c=='-'?sg=1, c=getchar():0), x=0; c>='0' && c<='9'; c=getchar()) x=(x<<1)+(x<<3)+c-'0';if (sg) x=-x;}

template<class T>inline void print(T x) {if (x<0) {putchar('-');return print(-x);}if (x<10) {putchar('0'+x);return;} print(x/10);putchar(x%10+'0');}

int power(int a, int b, int m, int ans=1) {

	for (; b; b>>=1, a=1LL*a*a%m) if (b&1) ans=1LL*ans*a%m;

	return ans;

}

#if ( ( _WIN32 || __WIN32__ ) && __cplusplus < 201103L)

    #define lld "%I64d"

#else

    #define lld "%lld"

#endif

#define NN 1000011

char s[NN];

int h[3][NN];

int pw[3][NN];

int mod[3]={10000007, 9238471, 1117117};

int get(int st, int ed, int k) {

	return (h[k][ed] - (INT)(st ? h[k][st-1] : 0) * pw[k][ed-st+1] % mod[k] + mod[k]) % mod[k];

}

bool check(int n, int ansp, int anse) {

//	for(int i=0; i<=ansp; i++) cout <<s[i]; cout <<' ';

//	for(int i=ansp+1; i<=anse; i++) cout << s[i]; cout <<' ';

//	for(int i=anse+1; i<n; i++) cout <<s[i] ; puts("");

	if(ansp == anse) return 0;

	if(s[anse+1] == '0' and n - anse - 1 > 1) return 0;

	if(s[ansp+1] =='0' and anse-ansp > 1) return 0;

	for(int i=0; i<3; i++) {

		if((get(0, ansp, i) + get(ansp+1, anse, i)) % mod[i] != get(anse+1, n-1, i)) return 0;

	}

	return 1;

}

int main(){

#ifndef ONLINE_JUDGE

	freopen("in.in", "r", stdin);

	freopen("out.out", "w", stdout);

	int _time=clock();

#endif

	scanf("%s", s);

	int n = strlen(s);

	if(s[0] == '0') {

		cout <<"0+";

		for(int i=1; i<=n/2; i++) putchar(s[i]);

		putchar('=');

		for(int i=n/2+1; i<n; i++) putchar(s[i]);

		puts("");

		return 0;

	}

	h[0][0] = h[1][0] = h[2][0] = s[0]-'0'; pw[0][0] = pw[1][0] = pw[2][0] =1;

	for(int i=1; i<n; i++) {

		h[0][i] = (h[0][i-1] * 10 + s[i] -'0') % mod[0];

		h[1][i] = (h[1][i-1] * 10 + s[i] -'0') % mod[1];

		h[2][i] = (h[2][i-1] * 10 + s[i] -'0') % mod[2];

		pw[0][i] = pw[0][i-1] * 10 % mod[0];

		pw[1][i] = pw[1][i-1] * 10 % mod[1];

		pw[2][i] = pw[2][i-1] * 10 % mod[2];

	}

	int ansp = -1, anse = -1;

	for(int i=0; i<n; i++) {

		int re = n - i - 1;

		int ed = re / 2 + i;

		int len = re / 2;

		if(re / 2 > i + 1) {

			if(s[i+1] == '0' and len > 1) continue;

			if(check(n, i, ed) == 0) continue;

			ansp=i, anse = ed;

			break;

		}

		else {

			if(re <= i + 1) continue;

			ed = n - i - 2;

			if(check(n, i, ed)) {ansp = i, anse = ed; break;}

			if(check(n, i, ed-1)) {ansp = i, anse = ed; break;}

		}

	}

	if(ansp == -1) int *a= new int[111111111];

	for(int i=0; i<=ansp; i++) cout<<s[i];

	putchar('+');

	for(int i=ansp+1; i<=anse; i++) cout <<s[i];

	putchar('=');

	for(int i=anse+1; i <n; i++) cout <<s[i];

	puts("");

#ifndef ONLINE_JUDGE

	cerr<<"The running time is : " << (DO)(clock()-_time) / 1000<<endl;

#endif

	return 0;

}


#include <bits/stdc++.h>

#define inf 0x3f3f3f3f

#define INF 0x3f3f3f3f3f3f3f3fLL

#define MOD 1000000007

#define pb push_back

#define sq(x) ((x)*(x))

#define x first

#define y second

#define eps 1e-8

#define bpt(x) (__builtin_popcount(x))

#define bptl(x) (__builtin_popcountll(x))

#define bit(x, y) (((x)>>(y))&1)

#define bclz(x) (__builtin_clz(x))

#define bclzl(x) (__builtin_clzll(x))

#define bctz(x) (__builtin_ctz(x))

#define bctzl(x) (__builtin_ctzll(x))

using namespace std;

typedef long long INT;

typedef vector<int> VI;

typedef pair<int, int> pii;

typedef pair<pii, int> pi3;

typedef double DO;

template<typename T, typename U> inline void smin(T &a, U b) {if (a>b) a=b;}

template<typename T, typename U> inline void smax(T &a, U b) {if (a<b) a=b;}

template<typename T> inline void gn(T &x) {char c, sg=0; while (c=getchar(), (c>'9' || c<'0') && c!='-');for((c=='-'?sg=1, c=getchar():0), x=0; c>='0' && c<='9'; c=getchar()) x=(x<<1)+(x<<3)+c-'0';if (sg) x=-x;}

template<class T, class T1>inline void gn(T &x, T1 &y) {gn(x); gn(y);}

template<class T, class T1, class T2>inline void gn(T &x, T1 &y, T2 &z) {gn(x); gn(y); gn(z);}

template<typename T> inline void print(T x) {if (x<0) {putchar('-');return print(-x);}if (x<10) {putchar('0'+x);return;} print(x/10);putchar(x%10+'0');}

template<typename T> inline void println(T x) {print(x), putchar('\n');}

template<typename T> inline void printsp(T x) {print(x), putchar(' ');}

template<class T, class T1> inline void print(T x, T1 y) {printsp(x), println(y);}

template<class T, class T1, class T2> inline void print(T x, T1 y, T2 z) {printsp(x), printsp(y), println(z);}

int power(int a, int b, int m, int ans=1) {

	for (; b; b>>=1, a=1LL*a*a%m) if (b&1) ans=1LL*ans*a%m;

	return ans;

}

#define NN 1111111

char s[NN];

int main() {

#ifndef ONLINE_JUDGE

	freopen("in.in", "r", stdin);

	freopen("out.out", "w", stdout);

#endif

	scanf("%s", s);

	int n=strlen(s);

	int m=(n+2)/3;

	for(int i=m; i<=n/2; i++){

		int r=n-i;

		if(i>1 && s[r]=='0') continue;

		if(r>i && !(r-i>1 && s[i]=='0' || i>1 && s[0]=='0') && s[0]<=s[r]){

			int a=i;

			int b=r-i;

			int c=0, ok=1, up=0;

			for(int k=0, j; ok && k<100; k++){

				j=rand()%i;

				int v1=(j<a ? s[i-j-1]-'0' : 0);

				int v2=(j<b ? s[r-j-1]-'0' : 0);

				if((v1+v2)%10!=s[n-j-1]-'0' && (v1+v2+1)%10!=s[n-j-1]-'0') ok=0;

			}

			for(int j=0; j<i && ok; j++){

				int v1=(j<a ? s[i-j-1]-'0' : 0);

				int v2=(j<b ? s[r-j-1]-'0' : 0);

				if((v1+v2+up)%10!=s[n-j-1]-'0') ok=0;

				up=(v1+v2+up)/10;

			}

			if(ok && !up){

				for(int j=0; j<i; j++) putchar(s[j]);

				putchar('+');

				for(int j=i; j<r; j++) putchar(s[j]);

				putchar('=');

				for(int j=r; j<n; j++) putchar(s[j]);

				puts("");

				return 0;

			}

		}

		if(r>i && !(i>1 && s[r-i]=='0' || r-i>1 && s[0]=='0') && s[r-i]<=s[r]){

			int a=r-i;

			int b=i;

			int c=0, ok=1, up=0;

			for(int k=0, j; k<100 && ok; k++){

				j=rand()%i;

				int v1=(j<a ? s[r-i-j-1]-'0' : 0);

				int v2=(j<b ? s[r-j-1]-'0' : 0);

				if((v1+v2)%10!=s[n-j-1]-'0' && (v1+v2+1)%10!=s[n-j-1]-'0') ok=0;

			}

			for(int j=0; j<i && ok; j++){

				int v1=(j<a ? s[r-i-j-1]-'0' : 0);

				int v2=(j<b ? s[r-j-1]-'0' : 0);

				if((v1+v2+up)%10!=s[n-j-1]-'0') ok=0;

				up=(v1+v2+up)/10;

			}

			if(ok && !up){

				for(int j=0; j<r-i; j++) putchar(s[j]);

				putchar('+');

				for(int j=r-i; j<r; j++) putchar(s[j]);

				putchar('=');

				for(int j=r; j<n; j++) putchar(s[j]);

				puts("");

				return 0;

			}

		}

		if(i>1 && r-i+1<i && !(r-i+1>1 && s[i-1]=='0' || i-1>1 && s[0]=='0') && s[r]=='1'){

			int a=i-1;

			int b=r-i+1;

			int c=0, ok=1, up=0;

			for(int k=0, j; k<100 && ok; k++){

				j=rand()%i;

				int v1=(j<a ? s[i-j-2]-'0' : 0);

				int v2=(j<b ? s[r-j-1]-'0' : 0);

				if((v1+v2)%10!=s[n-j-1]-'0' && (v1+v2+1)%10!=s[n-j-1]-'0') ok=0;

			}

			for(int j=0; j<i && ok; j++){

				int v1=(j<a ? s[i-j-2]-'0' : 0);

				int v2=(j<b ? s[r-j-1]-'0' : 0);

				if((v1+v2+up)%10!=s[n-j-1]-'0') ok=0;

				up=(v1+v2+up)/10;

			}

			if(ok && !up){

				for(int j=0; j<i-1; j++) putchar(s[j]);

				putchar('+');

				for(int j=i-1; j<r; j++) putchar(s[j]);

				putchar('=');

				for(int j=r; j<n; j++) putchar(s[j]);

				puts("");

				return 0;

			}

		}

		if(i>1 && r-i+1<i && !(i-1>1 && s[r-i+1]=='0' || r-i+1>1 && s[0]=='0') && s[r]=='1'){

			int a=r-i+1;

			int b=i-1;

			int c=0, ok=1, up=0;

			for(int k=0, j; k<100 && ok; k++){

				j=rand()%i;

				int v1=(j<a ? s[r-i-j]-'0' : 0);

				int v2=(j<b ? s[r-j-1]-'0' : 0);

				if((v1+v2)%10!=s[n-j-1]-'0' && (v1+v2+1)%10!=s[n-j-1]-'0') ok=0;

			}

			for(int j=0; j<i && ok; j++){

				int v1=(j<a ? s[r-i-j]-'0' : 0);

				int v2=(j<b ? s[r-j-1]-'0' : 0);

				if((v1+v2+up)%10!=s[n-j-1]-'0') ok=0;

				up=(v1+v2+up)/10;

			}

			if(ok && !up){

				for(int j=0; j<r-i+1; j++) putchar(s[j]);

				putchar('+');

				for(int j=r-i+1; j<r; j++) putchar(s[j]);

				putchar('=');

				for(int j=r; j<n; j++) putchar(s[j]);

				puts("");

				return 0;

			}

		}

	}

	return 0;

}


#include <bits/stdc++.h>

using namespace std;

typedef pair<int, int> pii;

#define x first

#define y second

#define mp make_pair

#define NN 1000010

#define mod1 133331

int p1[NN], p2[NN], q1[NN], q2[NN];

char str[NN];

int len;

void pre() {

	p1[0]=p2[0]=1;

	q1[0]=q2[0]=0;

	for (int i=1; i<NN; i++) p1[i]=p1[i-1]*10%mod1;

}

int calc(int l, int r) {

	int ans1=(q1[r]-1LL*q1[l-1]*p1[r-l+1]%mod1+mod1)%mod1;

	return ans1;

}

bool can(int l, int r) {

	if (!l) return 0;

	if (len-r-l<=0) return 0;

	if (str[len-r+1]=='0' && r>1) return 0;

	if (str[l+1]=='0' && len-r-l>1) return 0;

	if (str[1]=='0' && l>1) return 0;

	if (l>r) return 0;

	if (len-l-r>r) return 0;

	int s1=calc(1, l);

	int s2=calc(l+1, len-r);

	int s3=calc(len-r+1, len);

	int s=(s1+s2)%mod1;

	return s==s3;

}

int main() {

#ifndef ONLINE_JUDGE

	freopen("in.in", "r", stdin);

#endif

	pre();

	scanf("%s", str+1);

	len=strlen(str+1);

	for (int i=1; i<=len; i++) {

		q1[i]=(q1[i-1]*10+str[i]-'0')%mod1;

	}

	int fr, se;

	for (int i=1; i<len; i++) {

		if (can(i, i)) {fr=i, se=i; break;}

		if (can(len-i-i, i)) {fr=len-i-i, se=i; break;}

		if (can(i-1, i)) {fr=i-1, se=i; break;}

		if (can(len-i-i+1, i)) {fr=len-i-i+1, se=i; break;}

	}

	for (int i=1; i<=len; i++) {

		putchar(str[i]);

		if (fr==i) putchar('+');

		if (i==len-se) putchar('=');

	}

	return 0;

}


#include <bits/stdc++.h>

#define inf 0x3f3f3f3f

#define INF 0x3f3f3f3f3f3f3f3fLL

#define pb push_back

#define sq(x) ((x)*(x))

#define SZ(a) ((int)a.size())

#define x first

#define y second

#define eps 1e-8

#define bpt(x) (__builtin_popcount(x))

#define bptl(x) (__builtin_popcountll(x))

#define bit(x, y) (((x)>>(y))&1)

#define bclz(x) (__builtin_clz(x))

#define bclzl(x) (__builtin_clzll(x))

#define bctz(x) (__builtin_ctz(x))

#define bctzl(x) (__builtin_ctzll(x))

#define rands(n) (rand()%n+1)

#define rand0(n) (rands(n)-1)

#define Rands(n) ((INT)rand()*rand()%n+1)

#define Rand0(n) (Rands(n)-1)

#define PQ priority_queue<pii, vector<pii>, greater<pii> >

#define rep(i, a, b) for(int i=a; i<b; i++)

#define eprintf(...) fprintf(stderr, __VA_ARGS__)

#define shit(a) (1 << (a))

using namespace std;

typedef unsigned long long INT;

typedef vector<int> VI;

typedef pair<int, int> pii;

typedef pair<INT, INT> PII;

typedef pair<pii, int> ppi;

typedef double DO;

template<typename T, typename U> inline void smin(T &a, U b) {if (a>b) a=b;}

template<typename T, typename U> inline void smax(T &a, U b) {if (a<b) a=b;}

template<class T>inline void gn(T &x) {char c, sg=0; while (c=getchar(), (c>'9' || c<'0') && c!='-');for((c=='-'?sg=1, c=getchar():0), x=0; c>='0' && c<='9'; c=getchar()) x=(x<<1)+(x<<3)+c-'0';if (sg) x=-x;}

template<class T>inline void print(T x) {if (x<0) {putchar('-');return print(-x);}if (x<10) {putchar('0'+x);return;} print(x/10);putchar(x%10+'0');}

int power(int a, int b, int m, int ans=1) {

	for (; b; b>>=1, a=1LL*a*a%m) if (b&1) ans=1LL*ans*a%m;

	return ans;

}

#if ( ( _WIN32 || __WIN32__ ) && __cplusplus < 201103L)

    #define lld "%I64d"

#else

    #define lld "%lld"

#endif

#define NN 1000011

char s[NN];

int h[3][NN];

int pw[3][NN];

int mod[3]={10000007, 9238471, 1117117};

int get(int st, int ed, int k) {

	return (h[k][ed] - (INT)(st ? h[k][st-1] : 0) * pw[k][ed-st+1] % mod[k] + mod[k]) % mod[k];

}

bool check(int n, int ansp, int anse) {

//	for(int i=0; i<=ansp; i++) cout <<s[i]; cout <<' ';

//	for(int i=ansp+1; i<=anse; i++) cout << s[i]; cout <<' ';

//	for(int i=anse+1; i<n; i++) cout <<s[i] ; puts("");

	if(ansp == anse) return 0;

	if(s[ansp+1] =='0' and anse-ansp > 1) return 0;

	for(int i=0; i<3; i++) {

		if((get(0, ansp, i) + get(ansp+1, anse, i)) % mod[i] != get(anse+1, n-1, i)) return 0;

	}

	return 1;

}

int main(){

#ifndef ONLINE_JUDGE

	freopen("in.in", "r", stdin);

	freopen("out.out", "w", stdout);

	int _time=clock();

#endif

	scanf("%s", s);

	int n = strlen(s);

	if(s[0] == '0') {

		cout <<"0+";

		for(int i=1; i<=n/2; i++) putchar(s[i]);

		putchar('=');

		for(int i=n/2+1; i<n; i++) putchar(s[i]);

		puts("");

		return 0;

	}

	h[0][0] = h[1][0] = h[2][0] = s[0]-'0'; pw[0][0] = pw[1][0] = pw[2][0] =1;

	for(int i=1; i<n; i++) {

		h[0][i] = (h[0][i-1] * 10 + s[i] -'0') % mod[0];

		h[1][i] = (h[1][i-1] * 10 + s[i] -'0') % mod[1];

		h[2][i] = (h[2][i-1] * 10 + s[i] -'0') % mod[2];

		pw[0][i] = pw[0][i-1] * 10 % mod[0];

		pw[1][i] = pw[1][i-1] * 10 % mod[1];

		pw[2][i] = pw[2][i-1] * 10 % mod[2];

	}

	int ansp = -1, anse = -1;

	for(int i=0; i<n; i++) {

		int re = n - i - 1;

		int ed = re / 2 + i;

		int len = re / 2;

		if(re / 2 > i + 1) {

			if(s[i+1] == '0' and len > 1) continue;

			if(check(n, i, ed) == 0) continue;

			ansp=i, anse = ed;

			break;

		}

		else {

			if(re <= i + 1) continue;

			ed = n - i - 2;

			if(check(n, i, ed)) {ansp = i, anse = ed; break;}

			if(check(n, i, ed-1)) {ansp = i, anse = ed; break;}

		}

	}

	if(ansp == -1) int *a= new int[111111111];

	for(int i=0; i<=ansp; i++) cout<<s[i];

	putchar('+');

	for(int i=ansp+1; i<=anse; i++) cout <<s[i];

	putchar('=');

	for(int i=anse+1; i <n; i++) cout <<s[i];

	puts("");

#ifndef ONLINE_JUDGE

	cerr<<"The running time is : " << (DO)(clock()-_time) / 1000<<endl;

#endif

	return 0;

}


#include <bits/stdc++.h>

#define inf 0x3f3f3f3f

#define MOD 1000000007

#define pb push_back

#define sq(x) ((x)*(x))

#define x first

#define y second

#define eps 1e-9

#define bpt(x) (__builtin_popcount(x))

#define bptl(x) (__builtin_popcountll(x))

#define bit(x, y) (((x)>>(y))&1)

#define bclz(x) (__builtin_clz(x))

#define bclzl(x) (__builtin_clzll(x))

#define bctz(x) (__builtin_ctz(x))

#define bctzl(x) (__builtin_ctzll(x))

#define sgn(x) (((x)>eps)-((x)<-eps))

#define PQ priority_queue<pii, vector<pii>, greater<pii> >

using namespace std;

typedef long long INT;

typedef vector<int> VI;

typedef pair<int, int> pii;

typedef pair<pii, int> pi3;

typedef double DO;

template<typename T, typename U> inline void smin(T &a, U b) {if (a>b) a=b;}

template<typename T, typename U> inline void smax(T &a, U b) {if (a<b) a=b;}

template<class T>inline void gn(T &x) {char c, sg=0; while (c=getchar(), (c>'9' || c<'0') && c!='-');for((c=='-'?sg=1, c=getchar():0), x=0; c>='0' && c<='9'; c=getchar()) x=(x<<1)+(x<<3)+c-'0';if (sg) x=-x;}

template<class T, class T1>inline void gn(T &x, T1 &y) {gn(x); gn(y);}

template<class T, class T1, class T2>inline void gn(T &x, T1 &y, T2 &z) {gn(x); gn(y); gn(z);}

template<class T>inline void print(T x) {if (x<0) {putchar('-');return print(-x);}if (x<10) {putchar('0'+x);return;} print(x/10);putchar(x%10+'0');}

template<class T>inline void printsp(T x) {print(x); putchar(' ');}

template<class T>inline void println(T x) {print(x); putchar('\n');}

template<class T, class U>inline void print(T x, U y) {printsp(x); println(y);}

template<class T, class U, class V>inline void print(T x, U y, V z) {printsp(x); printsp(y); println(z);}

int power(int a, int b, int m, int ans=1) {

	for (; b; b>>=1, a=1LL*a*a%m) if (b&1) ans=1LL*ans*a%m;

	return ans;

}

#define NN 1000100

char s[NN];

int pp[]={10000439,9701969,9897599,9573127,9690299,9745661,9814429,9527071,9565793,9605159,9907907,9546553,9624161,9728249,9838583,9992891,9951523,9806491,9922063,9912137,};

int p1[22][NN], n, p2[22];

int print_ans(int a, int b) {

	char C=s[a+1];

	if (a>1 && s[1]=='0') return 0;

	if (b>1 && C=='0') return 0;

	if (n-a-b>1 && s[a+b+1]=='0') return 0;

	s[a+1]=0;

	printf("%s+", s+1);

	s[a+1]=C;

	C=s[b+a+1];

	s[a+b+1]=0;

	printf("%s=", s+a+1);

	s[a+b+1]=C;

	puts(s+a+b+1);

	return 1;

}

int calc(int i, int st, int ed) {

	int p=pp[i], *t=p1[i];

	return ((t[ed]-(INT)t[st-1]*power(10, ed-st+1, p))%p+p)%p;

}

int same(int a, int b, int c) {

	for (int i=0; i<20; i++) {

		if ((calc(i, 1, a)+calc(i, a+1, a+b))%pp[i]!=calc(i, a+b+1, a+b+c)) return 0;

	}

	return 1;

}

int main() {

#ifndef ONLINE_JUDGE

	freopen("in.in", "r", stdin);

	freopen("out.out", "w", stdout);

#endif

	scanf("%s", s+1);

	n=strlen(s+1);

	for (int i=1; i<=n; i++) {

		for (int j=0; j<20; j++) p1[j][i]=((INT)p1[j][i-1]*10+s[i]-'0')%pp[j];

	}

	for (int i=1; i<n; i++) {

		if (n-i*2>0 && n-i*2<=i && same(i, n-i*2, i)) {

			if (print_ans(i, n-i*2)) return 0;

		}

		if (n-i*2>0 && n-i*2<=i && same(n-i*2, i, i)) {

			if (print_ans(n-i*2, i)) return 0;

		}

		if (n-i*2>-1 && n-i*2+1<=i && i>1 && same(i-1, n-i*2+1, i)) {

			if (print_ans(i-1, n-i*2+1)) return 0;

		}

		if (n-i*2>-1 && n-i*2+1<=i && i>1 && same(n-i*2+1, i-1, i)) {

			if (print_ans(n-i*2+1, i-1)) return 0;

		}

	}

	return 0;

}


#include <bits/stdc++.h>

using namespace std;

typedef pair<int, int> pii;

#define x first

#define y second

#define mp make_pair

#define NN 1000010

#define mod1 13331

#define mod2 123457

int p1[NN], p2[NN], q1[NN], q2[NN];

char str[NN];

int len;

void pre() {

	p1[0]=p2[0]=1;

	q1[0]=q2[0]=0;

	for (int i=1; i<NN; i++) p1[i]=p1[i-1]*10%mod1, p2[i]=p2[i-1]*10%mod2;

}

pii calc(int l, int r) {

	int ans1=(q1[r]-1LL*q1[l-1]*p1[r-l+1]%mod1+mod1)%mod1;

	int ans2=(q2[r]-1LL*q2[l-1]*p2[r-l+1]%mod2+mod2)%mod2;

	return mp(ans1, ans2);

}

bool can(int l, int r) {

	if (!l) return 0;

	if (len-r-l<=0) return 0;

	if (str[len-r+1]=='0' && r>1) return 0;

	if (str[l+1]=='0' && len-r-l>1) return 0;

	if (str[1]=='0' && l>1) return 0;

	if (l>r) return 0;

	if (len-l-r>r) return 0;

	pii s1=calc(1, l);

	pii s2=calc(l+1, len-r);

	pii s3=calc(len-r+1, len);

	pii s=mp((s1.x+s2.x)%mod1, (s1.y+s2.y)%mod2);

	return s==s3;

}

int main() {

#ifndef ONLINE_JUDGE

	freopen("in.in", "r", stdin);

#endif

	pre();

	scanf("%s", str+1);

	len=strlen(str+1);

	for (int i=1; i<=len; i++) {

		q1[i]=(q1[i-1]*10+str[i]-'0')%mod1;

		q2[i]=(q2[i-1]*10+str[i]-'0')%mod2;

	}

	int fr, se;

	for (int i=1; i<len; i++) {

		if (can(i, i)) {fr=i, se=i; break;}

		if (can(len-i-i, i)) {fr=len-i-i, se=i; break;}

		if (can(i-1, i)) {fr=i-1, se=i; break;}

		if (can(len-i-i+1, i)) {fr=len-i-i+1, se=i; break;}

	}

	for (int i=1; i<=len; i++) {

		putchar(str[i]);

		if (fr==i) putchar('+');

		if (i==len-se) putchar('=');

	}

	return 0;

}


#include <bits/stdc++.h>

#define inf 0x3f3f3f3f

#define INF 0x3f3f3f3f3f3f3f3fLL

#define pb push_back

#define sq(x) ((x)*(x))

#define SZ(a) ((int)a.size())

#define x first

#define y second

#define eps 1e-8

#define bpt(x) (__builtin_popcount(x))

#define bptl(x) (__builtin_popcountll(x))

#define bit(x, y) (((x)>>(y))&1)

#define bclz(x) (__builtin_clz(x))

#define bclzl(x) (__builtin_clzll(x))

#define bctz(x) (__builtin_ctz(x))

#define bctzl(x) (__builtin_ctzll(x))

#define rands(n) (rand()%n+1)

#define rand0(n) (rands(n)-1)

#define Rands(n) ((INT)rand()*rand()%n+1)

#define Rand0(n) (Rands(n)-1)

#define PQ priority_queue<pii, vector<pii>, greater<pii> >

#define rep(i, a, b) for(int i=a; i<b; i++)

#define eprintf(...) fprintf(stderr, __VA_ARGS__)

#define shit(a) (1 << (a))

using namespace std;

typedef unsigned long long INT;

typedef vector<int> VI;

typedef pair<int, int> pii;

typedef pair<INT, INT> PII;

typedef pair<pii, int> ppi;

typedef double DO;

template<typename T, typename U> inline void smin(T &a, U b) {if (a>b) a=b;}

template<typename T, typename U> inline void smax(T &a, U b) {if (a<b) a=b;}

template<class T>inline void gn(T &x) {char c, sg=0; while (c=getchar(), (c>'9' || c<'0') && c!='-');for((c=='-'?sg=1, c=getchar():0), x=0; c>='0' && c<='9'; c=getchar()) x=(x<<1)+(x<<3)+c-'0';if (sg) x=-x;}

template<class T>inline void print(T x) {if (x<0) {putchar('-');return print(-x);}if (x<10) {putchar('0'+x);return;} print(x/10);putchar(x%10+'0');}

int power(int a, int b, int m, int ans=1) {

	for (; b; b>>=1, a=1LL*a*a%m) if (b&1) ans=1LL*ans*a%m;

	return ans;

}

#if ( ( _WIN32 || __WIN32__ ) && __cplusplus < 201103L)

    #define lld "%I64d"

#else

    #define lld "%lld"

#endif

#define NN 1000011

char s[NN];

int h[3][NN];

int pw[3][NN];

int mod[3]={10000007, 9238471, 1117117};

int get(int st, int ed, int k) {

	return (h[k][ed] - (INT)(st ? h[k][st-1] : 0) * pw[k][ed-st+1] % mod[k] + mod[k]) % mod[k];

}

bool check(int n, int ansp, int anse) {

//	for(int i=0; i<=ansp; i++) cout <<s[i]; cout <<' ';

//	for(int i=ansp+1; i<=anse; i++) cout << s[i]; cout <<' ';

//	for(int i=anse+1; i<n; i++) cout <<s[i] ; puts("");

	if(ansp == anse) return 0;

	if(s[anse+1] == '0' and n - anse - 1 > 1) return 0;

	if(s[ansp+1] =='0' and anse-ansp > 1) return 0;

	for(int i=0; i<3; i++) {

		if((get(0, ansp, i) + get(ansp+1, anse, i)) % mod[i] != get(anse+1, n-1, i)) return 0;

	}

	return 1;

}

int main(){

#ifndef ONLINE_JUDGE

	freopen("in.in", "r", stdin);

	freopen("out.out", "w", stdout);

	int _time=clock();

#endif

	scanf("%s", s);

	int n = strlen(s);

	if(s[0] == '0') {

		cout <<"0+";

		for(int i=1; i<=n/2; i++) putchar(s[i]);

		putchar('=');

		for(int i=n/2+1; i<n; i++) putchar(s[i]);

		puts("");

		return 0;

	}

	h[0][0] = h[1][0] = h[2][0] = s[0]-'0'; pw[0][0] = pw[1][0] = pw[2][0] =1;

	for(int i=1; i<n; i++) {

		h[0][i] = (h[0][i-1] * 10 + s[i] -'0') % mod[0];

		h[1][i] = (h[1][i-1] * 10 + s[i] -'0') % mod[1];

		h[2][i] = (h[2][i-1] * 10 + s[i] -'0') % mod[2];

		pw[0][i] = pw[0][i-1] * 10 % mod[0];

		pw[1][i] = pw[1][i-1] * 10 % mod[1];

		pw[2][i] = pw[2][i-1] * 10 % mod[2];

	}

	int ansp = -1, anse = -1;

	for(int i=0; i<n; i++) {

		int re = n - i - 1;

		int ed = re / 2 + i;

		int len = re / 2;

		if(re / 2 > i + 1) {

			if(s[i+1] == '0' and len > 1) continue;

			if(check(n, i, ed) == 0) continue;

			ansp=i, anse = ed;

			break;

		}

		else {

			if(re <= i + 1) continue;

			ed = n - i - 2;

			if(check(n, i, ed)) {ansp = i, anse = ed; break;}

			if(check(n, i, ed-1)) {ansp = i, anse = ed-1; break;}

		}

	}

	if(ansp == -1) int *a= new int[111111111];

	for(int i=0; i<=ansp; i++) cout<<s[i];

	putchar('+');

	for(int i=ansp+1; i<=anse; i++) cout <<s[i];

	putchar('=');

	for(int i=anse+1; i <n; i++) cout <<s[i];

	puts("");

#ifndef ONLINE_JUDGE

	cerr<<"The running time is : " << (DO)(clock()-_time) / 1000<<endl;

#endif

	return 0;

}


#include <bits/stdc++.h>

#define inf 0x3f3f3f3f

#define INF 0x3f3f3f3f3f3f3f3fLL

#define pb push_back

#define sq(x) ((x)*(x))

#define SZ(a) ((int)a.size())

#define x first

#define y second

#define eps 1e-8

#define bpt(x) (__builtin_popcount(x))

#define bptl(x) (__builtin_popcountll(x))

#define bit(x, y) (((x)>>(y))&1)

#define bclz(x) (__builtin_clz(x))

#define bclzl(x) (__builtin_clzll(x))

#define bctz(x) (__builtin_ctz(x))

#define bctzl(x) (__builtin_ctzll(x))

#define rands(n) (rand()%n+1)

#define rand0(n) (rands(n)-1)

#define Rands(n) ((INT)rand()*rand()%n+1)

#define Rand0(n) (Rands(n)-1)

#define PQ priority_queue<pii, vector<pii>, greater<pii> >

#define rep(i, a, b) for(int i=a; i<b; i++)

#define eprintf(...) fprintf(stderr, __VA_ARGS__)

#define shit(a) (1 << (a))

using namespace std;

typedef unsigned long long INT;

typedef vector<int> VI;

typedef pair<int, int> pii;

typedef pair<INT, INT> PII;

typedef pair<pii, int> ppi;

typedef double DO;

template<typename T, typename U> inline void smin(T &a, U b) {if (a>b) a=b;}

template<typename T, typename U> inline void smax(T &a, U b) {if (a<b) a=b;}

template<class T>inline void gn(T &x) {char c, sg=0; while (c=getchar(), (c>'9' || c<'0') && c!='-');for((c=='-'?sg=1, c=getchar():0), x=0; c>='0' && c<='9'; c=getchar()) x=(x<<1)+(x<<3)+c-'0';if (sg) x=-x;}

template<class T>inline void print(T x) {if (x<0) {putchar('-');return print(-x);}if (x<10) {putchar('0'+x);return;} print(x/10);putchar(x%10+'0');}

int power(int a, int b, int m, int ans=1) {

	for (; b; b>>=1, a=1LL*a*a%m) if (b&1) ans=1LL*ans*a%m;

	return ans;

}

#if ( ( _WIN32 || __WIN32__ ) && __cplusplus < 201103L)

    #define lld "%I64d"

#else

    #define lld "%lld"

#endif

#define NN 1000011

char s[NN];

int h[2][NN];

int pw[2][NN];

int mod[2]={10000007, 9238477};

int get(int st, int ed, int k) {

	return (h[k][ed] - (INT)(st ? h[k][st-1] : 0) * pw[k][ed-st+1] % mod[k] + mod[k]) % mod[k];

}

bool check(int n, int ansp, int anse) {

//	for(int i=0; i<=ansp; i++) cout <<s[i]; cout <<' ';

//	for(int i=ansp+1; i<=anse; i++) cout << s[i]; cout <<' ';

//	for(int i=anse+1; i<n; i++) cout <<s[i] ; puts("");

	if(ansp == anse) return 0;

	for(int i=0; i<2; i++) {

		if((get(0, ansp, i) + get(ansp+1, anse, i)) % mod[i] != get(anse+1, n-1, i)) return 0;

	}

	return 1;

}

int main(){

#ifndef ONLINE_JUDGE

	freopen("in.in", "r", stdin);

	freopen("out.out", "w", stdout);

	int _time=clock();

#endif

	scanf("%s", s);

	int n = strlen(s);

	if(s[0] == '0') {

		cout <<"0+";

		for(int i=1; i<=n/2; i++) putchar(s[i]);

		putchar('=');

		for(int i=n/2+1; i<n; i++) putchar(s[i]);

		puts("");

		return 0;

	}

	h[0][0] = h[1][0] = s[0]-'0'; pw[0][0] = pw[1][0] =1;

	for(int i=1; i<n; i++) {

		h[0][i] = (h[0][i-1] * 10 + s[i] -'0') % mod[0];

		h[1][i] = (h[1][i-1] * 10 + s[i] -'0') % mod[1];

		pw[0][i] = pw[0][i-1] * 10 % mod[0];

		pw[1][i] = pw[1][i-1] * 10 % mod[1];

	}

	int ansp = -1, anse = -1;

	for(int i=0; i<n; i++) {

		int re = n - i - 1;

		int ed = re / 2 + i;

		int len = re / 2;

		if(re / 2 > i + 1) {

			if(s[i+1] == '0' and len > 1) continue;

			if(check(n, i, ed) == 0) continue;

			ansp=i, anse = ed;

			break;

		}

		else {

			if(re <= i + 1) continue;

			ed = n - i - 2;

			if(check(n, i, ed)) {ansp = i, anse = ed; break;}

			if(check(n, i, ed-1)) {ansp = i, anse = ed; break;}

		}

	}

	if(ansp == -1) int *a= new int[111111111];

	for(int i=0; i<=ansp; i++) cout<<s[i];

	putchar('+');

	for(int i=ansp+1; i<=anse; i++) cout <<s[i];

	putchar('=');

	for(int i=anse+1; i <n; i++) cout <<s[i];

	puts("");

#ifndef ONLINE_JUDGE

	cerr<<"The running time is : " << (DO)(clock()-_time) / 1000<<endl;

#endif

	return 0;

}


#include <bits/stdc++.h>

#define inf 0x3f3f3f3f

#define INF 0x3f3f3f3f3f3f3f3fLL

#define pb push_back

#define sq(x) ((x)*(x))

#define SZ(a) ((int)a.size())

#define x first

#define y second

#define eps 1e-8

#define bpt(x) (__builtin_popcount(x))

#define bptl(x) (__builtin_popcountll(x))

#define bit(x, y) (((x)>>(y))&1)

#define bclz(x) (__builtin_clz(x))

#define bclzl(x) (__builtin_clzll(x))

#define bctz(x) (__builtin_ctz(x))

#define bctzl(x) (__builtin_ctzll(x))

#define rands(n) (rand()%n+1)

#define rand0(n) (rands(n)-1)

#define Rands(n) ((INT)rand()*rand()%n+1)

#define Rand0(n) (Rands(n)-1)

#define PQ priority_queue<pii, vector<pii>, greater<pii> >

#define rep(i, a, b) for(int i=a; i<b; i++)

#define eprintf(...) fprintf(stderr, __VA_ARGS__)

#define shit(a) (1 << (a))

using namespace std;

typedef unsigned long long INT;

typedef vector<int> VI;

typedef pair<int, int> pii;

typedef pair<INT, INT> PII;

typedef pair<pii, int> ppi;

typedef double DO;

template<typename T, typename U> inline void smin(T &a, U b) {if (a>b) a=b;}

template<typename T, typename U> inline void smax(T &a, U b) {if (a<b) a=b;}

template<class T>inline void gn(T &x) {char c, sg=0; while (c=getchar(), (c>'9' || c<'0') && c!='-');for((c=='-'?sg=1, c=getchar():0), x=0; c>='0' && c<='9'; c=getchar()) x=(x<<1)+(x<<3)+c-'0';if (sg) x=-x;}

template<class T>inline void print(T x) {if (x<0) {putchar('-');return print(-x);}if (x<10) {putchar('0'+x);return;} print(x/10);putchar(x%10+'0');}

int power(int a, int b, int m, int ans=1) {

	for (; b; b>>=1, a=1LL*a*a%m) if (b&1) ans=1LL*ans*a%m;

	return ans;

}

#if ( ( _WIN32 || __WIN32__ ) && __cplusplus < 201103L)

    #define lld "%I64d"

#else

    #define lld "%lld"

#endif

#define NN 1000011

char s[NN];

int h[2][NN];

int pw[2][NN];

int mod[2]={10000007, 9238477};

int get(int st, int ed, int k) {

	return (h[k][ed] - (INT)(st ? h[k][st-1] : 0) * pw[k][ed-st+1] % mod[k] + mod[k]) % mod[k];

}

bool check(int n, int ansp, int anse) {

//	for(int i=0; i<=ansp; i++) cout <<s[i]; cout <<' ';

//	for(int i=ansp+1; i<=anse; i++) cout << s[i]; cout <<' ';

//	for(int i=anse+1; i<n; i++) cout <<s[i] ; puts("");

	if(ansp == anse) return 0;

	if(s[ansp+1] =='0' and anse-ansp > 1) return 0;

	for(int i=0; i<2; i++) {

		if((get(0, ansp, i) + get(ansp+1, anse, i)) % mod[i] != get(anse+1, n-1, i)) return 0;

	}

	return 1;

}

int main(){

#ifndef ONLINE_JUDGE

	freopen("in.in", "r", stdin);

	freopen("out.out", "w", stdout);

	int _time=clock();

#endif

	scanf("%s", s);

	int n = strlen(s);

	if(s[0] == '0') {

		cout <<"0+";

		for(int i=1; i<=n/2; i++) putchar(s[i]);

		putchar('=');

		for(int i=n/2+1; i<n; i++) putchar(s[i]);

		puts("");

		return 0;

	}

	h[0][0] = h[1][0] = s[0]-'0'; pw[0][0] = pw[1][0] =1;

	for(int i=1; i<n; i++) {

		h[0][i] = (h[0][i-1] * 10 + s[i] -'0') % mod[0];

		h[1][i] = (h[1][i-1] * 10 + s[i] -'0') % mod[1];

		pw[0][i] = pw[0][i-1] * 10 % mod[0];

		pw[1][i] = pw[1][i-1] * 10 % mod[1];

	}

	int ansp = -1, anse = -1;

	for(int i=0; i<n; i++) {

		int re = n - i - 1;

		int ed = re / 2 + i;

		int len = re / 2;

		if(re / 2 > i + 1) {

			if(s[i+1] == '0' and len > 1) continue;

			if(check(n, i, ed) == 0) continue;

			ansp=i, anse = ed;

			break;

		}

		else {

			if(re <= i + 1) continue;

			ed = n - i - 2;

			if(check(n, i, ed)) {ansp = i, anse = ed; break;}

			if(check(n, i, ed-1)) {ansp = i, anse = ed; break;}

		}

	}

	if(ansp == -1) int *a= new int[111111111];

	for(int i=0; i<=ansp; i++) cout<<s[i];

	putchar('+');

	for(int i=ansp+1; i<=anse; i++) cout <<s[i];

	putchar('=');

	for(int i=anse+1; i <n; i++) cout <<s[i];

	puts("");

#ifndef ONLINE_JUDGE

	cerr<<"The running time is : " << (DO)(clock()-_time) / 1000<<endl;

#endif

	return 0;

}


#include <cstdio>
#include <iostream>
#include <vector>
#include <set>
#include <map>
#include <cmath>
#include <string>
#include <cstring>
#include <sstream>
#include <queue>
#include <iomanip>
#include <algorithm>
using namespace std;

typedef long long ll;
typedef pair <int, int> ii;

const int Maxm = 1000005;

bool prime[Maxm];
int pr[Maxm], prlen;
char str[Maxm];
int slen;
int pw10[Maxm];
int sum[Maxm];
int M;
set <ii> S;

bool Prime(int x)
{
	if (x < Maxm) return prime[x];
	for (int i = 0; i < prlen && pr[i] * pr[i] <= x; i++)
		if (x % pr[i] == 0) return false;
	return true;
}

int sRand() { return rand() % 15; }

ll Random() { return ll(sRand()) << 30ll | ll(sRand()) << 15ll | ll(sRand()); }

int Random(int l, int r) { return Random() % (r - l + 1) + l; }

int Get(int l, int r)
{
	return (sum[r] - ll(pw10[r - l + 1]) * sum[l - 1] % M + M) % M;
}

void randPrime()
{
	M = Random(10000000, 1000000000);
	while (!Prime(M)) M++;
	pw10[0] = 1;
	for (int i = 1; i <= slen; i++) {
		pw10[i] = ll(pw10[i - 1]) * 10 % M;
		sum[i] = (10ll * ll(sum[i - 1]) + int(str[i] - '0')) % M;
	}
}

bool Check(int a, int b, int c)
{
	if (a > 1 && str[1] == '0') return false;
	if (b > 1 && str[a + 1] == '0') return false;
	if (c > 1 && str[a + b + 1] == '0') return false;
	return (Get(1, a) + Get(a + 1, a + b)) % M == Get(a + b + 1, a + b + c);
}

int main()
{
	fill(prime + 2, prime + Maxm, true);
	for (int i = 2; i < Maxm; i++) if (prime[i]) {
		pr[prlen++] = i;
		for (int j = i + i; j < Maxm; j += i) prime[j] = false;
	}
	scanf("%s", str + 1); slen = strlen(str + 1);
	randPrime();
	for (int b = 0; 2 * b < slen; b++) {
		int a = slen - 2 * b;
		if (a <= b) {
			if (Check(a, b, b)) S.insert(ii(a, b));
			if (Check(b, a, b)) S.insert(ii(b, a));
		}
		a--;
		if (0 < a && a <= b) {
			if (Check(a, b, b + 1)) S.insert(ii(a, b));
			if (Check(b, a, b + 1)) S.insert(ii(b, a));
		}
	}
	for (int i = 0; i < 5; i++) {
		randPrime();
		for (set <ii>::iterator it = S.begin(); it != S.end(); )
			if (!Check(it->first, it->second, slen - it->first - it->second)) S.erase(it++);
			else it++;
	}
	int a = S.begin()->first, b = S.begin()->second;
	for (int i = 1; i <= a; i++)
		printf("%c", str[i]);
	printf("+");
	for (int i = 1; i <= b; i++)
		printf("%c", str[a + i]);
	printf("=");
	for (int i = 1; i <= slen - a - b; i++)
		printf("%c", str[a + b + i]);
	printf("\n");
	return 0;
}


#include<cstdio>
#include<iostream>
#include<cstring>
#define N 1000100
using namespace std;
char s[N];
int mi[N],n;
int ha[N];
int bas=10;
int ml=0;
int mod=1315326179;
int h(int l,int r)
{
	//cout<<ha[r]<<" "<<ha[l-1]
	return (1ll*ha[r]-(1ll*ha[l-1]*mi[r-l+1]%mod)+mod)%mod;
}
bool caozuo(int len1,int len2)
{
	if (s[len1+1]=='0'||s[len1+len2+1]=='0') return 0;
	int a1=h(1,len1);
	int a2=h(len1+1,len1+len2);
	int a3=h(len1+len2+1,n);
	//cout<<len1<<" "<<len2<<" "<<a1<<" "<<a2<<" "<<a3<<endl;
	if ((1ll*a1+a2)%mod==a3) return 1;
	return 0;
}
int main()
{
	scanf("%s",s+1);
	n=strlen(s+1);
	for (int i=1;i<=n;i++)
		ha[i]=(1ll*ha[i-1]*bas+s[i]-'0')%mod;
	mi[0]=1;
	for (int i=1;i<=n;i++) mi[i]=(1ll*mi[i-1]*bas)%mod;
	ml=(n+2)/3;
	int ans1,ans2;
	for (int len=ml;len<n-1;len++)
	{
		int len1=len;
		int len2=n-len-len1;
		if (caozuo(len1,len2)) {ans1=len1,ans2=len2;break;}
		if (caozuo(len2,len1)) {ans1=len2,ans2=len1;break;}
		len1=len-1;
		len2=n-len-len1;
		if (caozuo(len1,len2)) {ans1=len1,ans2=len2;break;}
		if (caozuo(len2,len1)) {ans1=len2,ans2=len1;break;}
	}
	for (int i=1;i<=ans1;i++)
		printf("%c",s[i]);
	printf("+");
	for (int i=ans1+1;i<=ans1+ans2;i++)
		printf("%c",s[i]);
	printf("=");
	for (int i=ans1+ans2+1;i<=n;i++)
		printf("%c",s[i]);
}


#include<cstdio>
#include<iostream>
#include<cstring>
#define N 1000100
using namespace std;
char s[N];
int mi[N],n;
int ha[N];
int bas=10;
int ml=0;
int mod=1315326179;
int h(int l,int r)
{
	//cout<<ha[r]<<" "<<ha[l-1]
	return (1ll*ha[r]-(1ll*ha[l-1]*mi[r-l+1]%mod)+mod)%mod;
}
bool caozuo(int len1,int len2)
{
	int a1=h(1,len1);
	int a2=h(len1+1,len1+len2);
	int a3=h(len1+len2+1,n);
	//cout<<len1<<" "<<len2<<" "<<a1<<" "<<a2<<" "<<a3<<endl;
	if ((1ll*a1+a2)%mod==a3) return 1;
	return 0;
}
int main()
{
	scanf("%s",s+1);
	n=strlen(s+1);
	for (int i=1;i<=n;i++)
		ha[i]=(1ll*ha[i-1]*bas+s[i]-'0')%mod;
	mi[0]=1;
	for (int i=1;i<=n;i++) mi[i]=(1ll*mi[i-1]*bas)%mod;
	ml=(n+2)/3;
	int ans1,ans2;
	for (int len=ml;len<n-1;len++)
	{
		int len1=len;
		int len2=n-len-len1;
		if (caozuo(len1,len2)) {ans1=len1,ans2=len2;break;}
		if (caozuo(len2,len1)) {ans1=len2,ans2=len1;break;}
		len1=len-1;
		len2=n-len-len1;
		if (caozuo(len1,len2)) {ans1=len1,ans2=len2;break;}
		if (caozuo(len2,len1)) {ans1=len2,ans2=len1;break;}
	}
	for (int i=1;i<=ans1;i++)
		printf("%c",s[i]);
	printf("+");
	for (int i=ans1+1;i<=ans1+ans2;i++)
		printf("%c",s[i]);
	printf("=");
	for (int i=ans1+ans2+1;i<=n;i++)
		printf("%c",s[i]);
}


#include<cstdio>
#include<iostream>
#include<cstring>
#define N 1000100
using namespace std;
char s[N];
int mi[N],n;
int ha[N];
int bas=10;
int ml=0;
int mod=1315326179;
int h(int l,int r)
{
	//cout<<ha[r]<<" "<<ha[l-1]
	return (1ll*ha[r]-(1ll*ha[l-1]*mi[r-l+1]%mod)+mod)%mod;
}
bool caozuo(int len1,int len2)
{
	if ((s[len1+1]=='0'&&len1!=1)||(len2!=1&&s[len1+len2+1]=='0')) return 0;
	int a1=h(1,len1);
	int a2=h(len1+1,len1+len2);
	int a3=h(len1+len2+1,n);
	//cout<<len1<<" "<<len2<<" "<<a1<<" "<<a2<<" "<<a3<<endl;
	if ((1ll*a1+a2)%mod==a3) return 1;
	return 0;
}
int main()
{
	scanf("%s",s+1);
	n=strlen(s+1);
	for (int i=1;i<=n;i++)
		ha[i]=(1ll*ha[i-1]*bas+s[i]-'0')%mod;
	mi[0]=1;
	for (int i=1;i<=n;i++) mi[i]=(1ll*mi[i-1]*bas)%mod;
	ml=(n+2)/3;
	int ans1,ans2;
	for (int len=ml;len<n-1;len++)
	{
		int len1=len;
		int len2=n-len-len1;
		if (caozuo(len1,len2)) {ans1=len1,ans2=len2;break;}
		if (caozuo(len2,len1)) {ans1=len2,ans2=len1;break;}
		len1=len-1;
		len2=n-len-len1;
		if (caozuo(len1,len2)) {ans1=len1,ans2=len2;break;}
		if (caozuo(len2,len1)) {ans1=len2,ans2=len1;break;}
	}
	for (int i=1;i<=ans1;i++)
		printf("%c",s[i]);
	printf("+");
	for (int i=ans1+1;i<=ans1+ans2;i++)
		printf("%c",s[i]);
	printf("=");
	for (int i=ans1+ans2+1;i<=n;i++)
		printf("%c",s[i]);
}


#include<cstdio>
#include<iostream>
#include<cstring>
#define N 1000100
using namespace std;
char s[N];
int mi[N],n;
int ha[N];
int bas=10;
int ml=0;
int mod=1315326179;
int h(int l,int r)
{
	//cout<<ha[r]<<" "<<ha[l-1]
	return (1ll*ha[r]-(1ll*ha[l-1]*mi[r-l+1]%mod)+mod)%mod;
}
bool caozuo(int len1,int len2)
{
	if ((s[1]=='0'&&len1!=1)||(len2!=1&&s[len1+1]=='0')||((n-len1-len2)!=1&&s[len1+len2+1]=='0')) return 0;
	int a1=h(1,len1);
	int a2=h(len1+1,len1+len2);
	int a3=h(len1+len2+1,n);
	//cout<<len1<<" "<<len2<<" "<<a1<<" "<<a2<<" "<<a3<<endl;
	if ((1ll*a1+a2)%mod==a3) return 1;
	return 0;
}
int main()
{
	scanf("%s",s+1);
	n=strlen(s+1);
	for (int i=1;i<=n;i++)
		ha[i]=(1ll*ha[i-1]*bas+s[i]-'0')%mod;
	mi[0]=1;
	for (int i=1;i<=n;i++) mi[i]=(1ll*mi[i-1]*bas)%mod;
	ml=(n+2)/3;
	int ans1,ans2;
	for (int len=ml;len<n-1;len++)
	{
		int len1=len;
		int len2=n-len-len1;
		if (caozuo(len1,len2)) {ans1=len1,ans2=len2;break;}
		if (caozuo(len2,len1)) {ans1=len2,ans2=len1;break;}
		len1=len-1;
		len2=n-len-len1;
		if (caozuo(len1,len2)) {ans1=len1,ans2=len2;break;}
		if (caozuo(len2,len1)) {ans1=len2,ans2=len1;break;}
	}
	for (int i=1;i<=ans1;i++)
		printf("%c",s[i]);
	printf("+");
	for (int i=ans1+1;i<=ans1+ans2;i++)
		printf("%c",s[i]);
	printf("=");
	for (int i=ans1+ans2+1;i<=n;i++)
		printf("%c",s[i]);
}


#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<algorithm>
#include<map>
#include<complex>
#include<queue>
#include<stack>
#include<cctype>
#include<cmath>
#include<set>
#include<vector>
#define maxn 1000010
#define RG register
#define mk make_pair
#define pb push_back
#define fi first
#define se second
#define UN unsigned
#define LL long long
using namespace std;
char ch[1000010];
int mod[5]={1000000007,1000000009,19260817,75309401,99475111},n;
struct data{
  int hs[maxn],mod,pw[maxn];
  int gethash(int l,int r){
    return (hs[r]-(LL)hs[l-1]*pw[r-l+1]%mod+mod)%mod;
  }
}t[5];
inline void out(int p,int d){
  for(int i=1;i<=p;i++) printf("%c",ch[i]);
  printf("+");
  for(int i=p+1;i<=d;i++) printf("%c",ch[i]);
  printf("=");
  for(int i=d+1;i<=n;i++) printf("%c",ch[i]);
  exit(0);
}
inline bool calc(int p,int d){
  if(p+1>d || d==n) return 0;
  if(ch[d+1]=='0' && n-d>1) return 0;
  for(int i=0;i<5;i++){
    if((t[i].hs[p]+t[i].gethash(p+1,d))%t[i].mod!=t[i].gethash(d+1,n))
      return 0;
  }
  return 1;
}
inline void check(int p){
  if(ch[p+1]=='0'){
    if(calc(p,p+1)) out(p,p+1);
    return;
  }
  int y=p+(n-p)/2;
  if(calc(p,y-1)) out(p,y-1);
  if(calc(p,y)) out(p,y);
  if(calc(p,y+1)) out(p,y+1);
  if(n-p>=p && calc(p,n-p)) out(p,n-p);
  if(n-p-1>=p && calc(p,n-p-1)) out(p,n-p-1);
}
int main(){
  scanf("%s",ch+1);
  n=strlen(ch+1);
  for(int i=0;i<5;i++){
    t[i].mod=mod[i];
    t[i].pw[0]=1;
    for(int j=1;j<=n;j++)
      t[i].hs[j]=((LL)t[i].hs[j-1]*10+ch[j]-'0')%t[i].mod,
	t[i].pw[j]=(LL)t[i].pw[j-1]*10%t[i].mod;
  }
  for(int i=1;i<n;i++)check(i);
  return 0;
}


#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<algorithm>
#include<map>
#include<complex>
#include<queue>
#include<stack>
#include<cctype>
#include<cmath>
#include<set>
#include<vector>
#define maxn 1000010
#define RG register
#define mk make_pair
#define pb push_back
#define fi first
#define se second
#define UN unsigned
#define LL long long
using namespace std;
char ch[1000010];
int mod[5]={1000000007,1000000009,19260817,75309401,99475111},n;
struct data{
  int hs[maxn],mod,pw[maxn];
  int gethash(int l,int r){
    return (hs[r]-(LL)hs[l-1]*pw[r-l+1]%mod+mod)%mod;
  }
}t[5];
inline void out(int p,int d){
  for(int i=1;i<=p;i++) printf("%c",ch[i]);
  printf("+");
  for(int i=p+1;i<=d;i++) printf("%c",ch[i]);
  printf("=");
  for(int i=d+1;i<=n;i++) printf("%c",ch[i]);
  exit(0);
}
inline bool calc(int p,int d){
  if(p+1>d || d==n) return 0;
  if(ch[d+1]=='0' && n-d>1) return 0;
  for(int i=0;i<5;i++){
    if((t[i].hs[p]+t[i].gethash(p+1,d))%t[i].mod!=t[i].gethash(d+1,n))
      return 0;
  }
  return 1;
}
inline void check(int p){
  if(ch[p+1]=='0'){
    if(calc(p,p+1)) out(p,p+1);
    return;
  }
  int y=p+(n-p)/2;
  if(calc(p,y-1)) out(p,y-1);
  if(calc(p,y)) out(p,y);
  if(calc(p,y+1)) out(p,y+1);
}
int main(){
  scanf("%s",ch+1);
  n=strlen(ch+1);
  for(int i=0;i<5;i++){
    t[i].mod=mod[i];
    t[i].pw[0]=1;
    for(int j=1;j<=n;j++)
      t[i].hs[j]=((LL)t[i].hs[j-1]*10+ch[j]-'0')%t[i].mod,
	t[i].pw[j]=(LL)t[i].pw[j-1]*10%t[i].mod;
  }
  for(int i=1;i<n;i++)check(i);
  return 0;
}


#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<iostream>
#include<algorithm>
#define maxn 1000010

using namespace std;

int mod[]={10007,998244353,1000000007};
int p[]={23,233,10007};
int hash[3][maxn],P[3][maxn];
int n;
char s[maxn];

int HASH(int i,int l,int r)
{
	return (hash[i][r]-1ll*hash[i][l-1]*P[i][r-l+1]%mod[i]+mod[i])%mod[i];
}

bool check(int pos1,int pos2)
{
	if (pos1==0) return 0;
	int len1=pos1,len2=pos2-pos1,len3=n-pos2;
	if (max(len1,len2)+1<len3) return 0;
	if (len1>len3 || len2>len3) return 0;
	if (len1>1 && s[1]=='0') return 0;
	if (len2>1 && s[pos1+1]=='0') return 0;
	if (len3>1 && s[pos2+1]=='0') return 0;
	//printf("%d %d\n",pos1,pos2);
	//printf("%d %d %d\n",HASH(0,1,pos1),HASH(0,pos1+1,pos2),HASH(0,pos2+1,n));
	for (int i=0;i<3;i++)
	  if ((HASH(i,1,pos1)+HASH(i,pos1+1,pos2))%mod[i]!=HASH(i,pos2+1,n)) return 0;
	return 1;
}

void print(int l,int r)
{
	for (int j=1;j<=l;j++) printf("%c",s[j]);printf("+");
	for (int j=l+1;j<=r;j++) printf("%c",s[j]);printf("=");
	for (int j=r+1;j<=n;j++) printf("%c",s[j]);printf("\n");
}

int main()
{
	scanf("%s",s+1);
	n=strlen(s+1);
	for (int i=0;i<3;i++)
	{
		hash[i][0]=0;P[i][0]=1;
		for (int j=1;j<=n;j++)
		  P[i][j]=10ll*P[i][j-1]%mod[i],hash[i][j]=(10ll*hash[i][j-1]+(s[j]-'0'))%mod[i];
	}
	for (int i=1;i<=n/2;i++)
	{
		if (check(i,n-i)) {print(i,n-i);break;}
		else if (check(i-1,n-i)) {print(i-1,n-i);break;}
		else if (check(n-2*i,n-i)) {print(n-2*i,n-i);break;}
		else if (check(n-2*i+1,n-i)) {print(n-2*i+1,n-i);break;}
	}
	//check(3,5);
	return 0;
}


#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
using namespace std;
typedef long long LL;
typedef pair<int, int> PII;
#define PB push_back
#define PII pair<int, int>
#define REP(i, a, b) for(int i = a; i < b; i++)
#define PER(i, a, b) for(int i = b - 1; i >= a; i--)
#define ALL(x) x.begin(), x.end()

const int maxn = 1000000 + 10;

const LL MOD = 1000000007LL;
LL mul(LL a, LL b) { return a * b % MOD; }
LL add(LL a, LL b) {
	LL ans = a + b;
	if(ans >= MOD) ans -= MOD;
	return ans;
}

int n;
char s[maxn];

LL suf[maxn], inv[maxn];

LL pow_mod(LL a, LL p) {
	LL ans = 1;
	while(p) {
		if(p & 1) ans = ans * a % MOD;
		a = a * a % MOD;
		p >>= 1;
	}
	return ans;
}

LL hash(int l, int r) {
	r = l + r - 1;
	LL ans = suf[l] - suf[r + 1];
	if(ans < 0) ans += MOD;
	return mul(ans, inv[n - r]);
}

bool check(int l, int len) {
	if((len < 1) || (len > 1 && s[l] == '0')) return false;
	return true;
}

void print(int l1, int l2) {
	REP(i, 1, l1 + 1) putchar(s[i]);
	putchar('+');
	REP(i, l1 + 1, l1 + l2 + 1) putchar(s[i]);
	putchar('=');
	REP(i, l1 + l2 + 1, n + 1) putchar(s[i]);
	putchar('\n');
}

int main() {
	scanf("%s", s + 1);
	n = strlen(s + 1);
	inv[0] = 1;
	LL inv_ten = pow_mod(10LL, MOD - 2);
	LL p = 1;
	PER(i, 1, n + 1) {
		suf[i] = add(suf[i+1], mul((LL)(s[i]-'0'), p));
		p = mul(p, 10LL);
	}
	REP(i, 1, n + 1) inv[i] = mul(inv[i-1], inv_ten);

	REP(l3, 1, n / 2 + 1) {
		if(!check(n-l3+1, l3)) continue;
		int l1, l2;
		for(l1 = l3 - 1; l1 <= l3; l1++) {
			l2 = n - l3 - l1;
			if(l2 > l3) continue;
			if(!check(1, l1) || !check(l1+1, l2)) continue;
			if(add(hash(1, l1), hash(l1+1, l2)) == hash(n-l3+1, l3)) {
				print(l1, l2);
				return 0;
			}
		}
		for(l2 = l3 - 1; l2 <= l3; l2++) {
			l1 = n - l3 - l2;
			if(l1 > l3) continue;
			if(!check(1, l1) || !check(l1+1, l2)) continue;
			if(add(hash(1, l1), hash(l1+1, l2)) == hash(n-l3+1, l3)) {
				print(l1, l2);
				return 0;
			}
		}
	}

	puts("Not find!");

	return 0;
}


#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int M=(int)1e6+5;
int n;
char str[M];
bool check(int l1,int r1,int l2,int r2,int l3,int r3){
	int len1=r1-l1+1,len2=r2-l2+1,len3=r3-l3+1;
	if(len1>len3||len2>len3)return false;
	if(len1>1&&str[l1]=='0')return false;
	if(len2>1&&str[l2]=='0')return false;
	int add=0;
	for(int i=0;i<len3;i++){
		int p1=r1-i,p2=r2-i;
		if(p1<l1)p1=0;
		else p1=str[p1]^48;
		if(p2<l2)p2=0;
		else p2=str[p2]^48;
		int tmp=p1+p2+add;
		if(tmp%10!=(str[r3-i]^48))return false;
		add=tmp/10;
	}
	return !add;
}
void pf(int l1,int r1,int l2,int r2,int l3,int r3){
	for(int i=l1;i<=r1;i++)putchar(str[i]);
	putchar('+');
	for(int i=l2;i<=r2;i++)putchar(str[i]);
	putchar('=');
	for(int i=l3;i<=r3;i++)putchar(str[i]);
}
int main(){
	scanf("%s",str+1);
	n=strlen(str+1);
	for(int len=1;len<=n;len++){
		if(len>1&&str[n-len+1]=='0')continue;
		{//len len' len
			int ed1=len;
			int st2=ed1+1;
			int ed2=n-len;
			if(check(1,ed1,st2,ed2,ed2+1,n)){
				pf(1,ed1,st2,ed2,ed2+1,n);
				return 0;
			}
		}
		{//len-1 len' len
			int ed1=len-1;
			int ed2=n-len;
			int st2=ed1+1;
			if(check(1,ed1,st2,ed2,ed2+1,n)){
				pf(1,ed1,st2,ed2,ed2+1,n);
				return 0;
			}
		}
		{//len' len len
			int ed2=n-len;
			int st2=ed2-len+1;
			int ed1=st2-1;
			if(check(1,ed1,st2,ed2,ed2+1,n)){
				pf(1,ed1,st2,ed2,ed2+1,n);
				return 0;
			}
		}
		{//len' len-1 len
			int ed2=n-len;
			int st2=ed2-(len-1)+1;
			int ed1=st2-1;
			if(check(1,ed1,st2,ed2,ed2+1,n)){
				pf(1,ed1,st2,ed2,ed2+1,n);
				return 0;
			}
		}
	}
	return 0;
}


#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
const int M=(int)1e6+5;
const int P=(int)1e9+7;
int n,Hs[M],Bs[M];
char str[M];
int gethash(int l,int r){
	return (Hs[r]-(ll)Hs[l-1]*Bs[r-l+1]%P+P)%P;
}
bool check(int l1,int r1,int l2,int r2,int l3,int r3){
	int len1=r1-l1+1,len2=r2-l2+1,len3=r3-l3+1;
	if(len1>len3||len2>len3)return false;
	if(len1>1&&str[l1]=='0')return false;
	if(len2>1&&str[l2]=='0')return false;
	return (gethash(l1,r1)+gethash(l2,r2))%P==gethash(l3,r3);
}
void pf(int l1,int r1,int l2,int r2,int l3,int r3){
	for(int i=l1;i<=r1;i++)putchar(str[i]);
	putchar('+');
	for(int i=l2;i<=r2;i++)putchar(str[i]);
	putchar('=');
	for(int i=l3;i<=r3;i++)putchar(str[i]);
}
int main(){
	scanf("%s",str+1);
	n=strlen(str+1);
	Bs[0]=1;
	for(int i=1;i<=n;i++){
		Hs[i]=((ll)10*Hs[i-1]+(str[i]-'0'))%P;
		Bs[i]=(ll)Bs[i-1]*10%P;
	}
	for(int len=1;len<=n;len++){
		if(len>1&&str[n-len+1]=='0')continue;
		{//len len' len
			int ed1=len;
			int st2=ed1+1;
			int ed2=n-len;
			if(check(1,ed1,st2,ed2,ed2+1,n)){
				pf(1,ed1,st2,ed2,ed2+1,n);
				return 0;
			}
		}
		{//len-1 len' len
			int ed1=len-1;
			int ed2=n-len;
			int st2=ed1+1;
			if(check(1,ed1,st2,ed2,ed2+1,n)){
				pf(1,ed1,st2,ed2,ed2+1,n);
				return 0;
			}
		}
		{//len' len len
			int ed2=n-len;
			int st2=ed2-len+1;
			int ed1=st2-1;
			if(check(1,ed1,st2,ed2,ed2+1,n)){
				pf(1,ed1,st2,ed2,ed2+1,n);
				return 0;
			}
		}
		{//len' len-1 len
			int ed2=n-len;
			int st2=ed2-(len-1)+1;
			int ed1=st2-1;
			if(check(1,ed1,st2,ed2,ed2+1,n)){
				pf(1,ed1,st2,ed2,ed2+1,n);
				return 0;
			}
		}
	}
	return 0;
}


#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
const LL N=1000005;
const LL MOD=19260817;
LL pow[N];
char ss[N];
LL len;
LL a[N],b[N];//前缀，后缀
LL sum=0;
LL calc (LL l,LL r)//l到r的值是什么
{
	return ((sum-b[r+1]-a[l-1]*pow[len-l+1]%MOD)%MOD+MOD)%MOD;
}
bool check (LL l,LL r)//这一段是不是
{
	if (l<=0) return false;
	if (l+1>r-1)  return false;
	if (((r-1)-(l+1)+1!=1)&&ss[l+1]=='0') return false;
	if (l!=1&&ss[1]=='0') return false;
	LL lalal=((b[r]-a[l])%MOD+MOD)%MOD;
	lalal=lalal*pow[len-r+1]%MOD;
	if (lalal==calc(l+1,r-1))
		return true;
	return false;
}
int main()
{
	pow[0]=1;for (LL u=1;u<=1000000;u++) pow[u]=pow[u-1]*10%MOD;
	scanf("%s",ss+1);len=strlen(ss+1);
	for (LL u=1;u<=len;u++) sum=(sum*10+ss[u]-'0')%MOD;
	for (LL u=1;u<=len;u++) a[u]=(a[u-1]*10+ss[u]-'0')%MOD;
/*	for (LL u=1;u<=len;u++) printf("%d ",a[u]);
	printf("\n");*/
	for (LL u=len;u>=1;u--) b[u]=(b[u+1]+(ss[u]-'0')*pow[len-u])%MOD;
	LL ans,ans1;
	for (LL u=len;u>=3;u--)//在谁前面加上=好
	{
		LL t=len-u+1;
		if (t!=1&&ss[u]=='0') continue;
		LL i=len-u+1;//第几个数字后面
		if (check(i,u))
		{
			ans=u;ans1=i;
			break;
		}
		i--;
		if (check(i,u))
		{
			ans=u;ans1=i;
			break;
		}
	//	if (t==9) printf("YES");
		i=u-t;
		if (check(i,u))
		{
			ans=u;ans1=i;
			break;
		}
		i--;
		if (check(i,u))
		{
			ans=u;ans1=i;
			break;
		}
	}
	if (ans!=0)
	{
	for (LL u=1;u<=len;u++)
	{
		if (u==ans) printf("=");
		printf("%c",ss[u]);
		if (u==ans1) printf("+");
	}
	}
	return 0;
}


#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
const LL N=1000005;
const LL MOD=998244353;
LL pow[N];
char ss[N];
LL len;
LL a[N],b[N];//前缀，后缀
LL sum=0;
LL calc (LL l,LL r)//l到r的值是什么
{
	return ((sum-b[r+1]-a[l-1]*pow[len-l+1]%MOD)%MOD+MOD)%MOD;
}
bool check (LL l,LL r)//这一段是不是
{
	if (l<=0) return false;
	if (l+1>r-1)  return false;
	if (((r-1)-(l+1)+1!=1)&&ss[l+1]=='0') return false;
	if (l!=1&&ss[1]=='0') return false;
	LL lalal=((b[r]-a[l])%MOD+MOD)%MOD;
	lalal=lalal*pow[len-r+1]%MOD;
	if (lalal==calc(l+1,r-1))
		return true;
	return false;
}
int main()
{
	pow[0]=1;for (LL u=1;u<=1000000;u++) pow[u]=pow[u-1]*10%MOD;
	scanf("%s",ss+1);len=strlen(ss+1);
	for (LL u=1;u<=len;u++) sum=(sum*10+ss[u]-'0')%MOD;
	for (LL u=1;u<=len;u++) a[u]=(a[u-1]*10+ss[u]-'0')%MOD;
/*	for (LL u=1;u<=len;u++) printf("%d ",a[u]);
	printf("\n");*/
	for (LL u=len;u>=1;u--) b[u]=(b[u+1]+(ss[u]-'0')*pow[len-u])%MOD;
	LL ans,ans1;
	for (LL u=len;u>=3;u--)//在谁前面加上=好
	{
		LL t=len-u+1;
		if (t!=1&&ss[u]=='0') continue;
		LL i=len-u+1;//第几个数字后面
		if (check(i,u))
		{
			ans=u;ans1=i;
			break;
		}
		i--;
		if (check(i,u))
		{
			ans=u;ans1=i;
			break;
		}
	//	if (t==9) printf("YES");
		i=u-t;
		if (check(i,u))
		{
			ans=u;ans1=i;
			break;
		}
		i--;
		if (check(i,u))
		{
			ans=u;ans1=i;
			break;
		}
	}
	if (ans!=0)
	{
	for (LL u=1;u<=len;u++)
	{
		if (u==ans) printf("=");
		printf("%c",ss[u]);
		if (u==ans1) printf("+");
	}
	}
	return 0;
}