func_code_string: #include <bits/stdc++.h>   using namespace std;   inline long long read() {     long long t = 0, f = 1;     char c = getchar();     while (c <  0  || c >  9 ) {       c = getchar();     }     while (c >=  0  && c <=  9 ) t = t * 10 + c - 48, c = getchar();     return t * f;   }   char s[10000001];   long long len, hsh[2000001][11], bas = 10;   long long mo[4] = {1000000007, 1000000009, 998244353, 1000000037};   inline long long ksm1(long long x, long long y, long long m) {     long long sum = 1;     for (; y; y /= 2) {       if (y & 1) sum = sum * x % m;       x = x * x % m;     }     return sum;   }   inline long long ksm(long long x, long long y) {     long long sum = 1;     for (; y; y /= 2) {       if (y & 1) sum = sum * x;       x = x * x;     }     return sum;   }   inline long long get(int l, int r, int k) {     long long t = 0, ret = 0;     if (k == 10)       t = ksm(bas, r - l + 1), ret = hsh[r][10] - t * hsh[l - 1][10];     else       t = ksm1(bas, r - l + 1, mo[k]),       ret = ((hsh[r][k] - t * hsh[l - 1][k]) % mo[k] + mo[k]) % mo[k];     return ret;   }   int a1[2000001], a2[2000001], a3[2000001], a4[2000001], len1, len2, len3;   bool flag = 0;   inline void solve(int x) {     int rest = len - x;     for (long long l = rest / 2; l <= rest / 2 + 1; ++l) {       if ((get(1, x, 10) + get(x + 1, len - l, 10)) ==           get(len - l + 1, len, 10)) {         flag = 1;         for (long long i = 0; i <= 3; ++i)           if (((get(1, x, i) + get(x + 1, len - l, i)) % mo[i] + mo[i]) % mo[i] !=               get(len - l + 1, len, i)) {             flag = 0;             break;           }         if (!flag) continue;         if (s[1] ==  0  && x != 1) continue;         if (s[x + 1] ==  0  && len - l != x + 1) continue;         if (s[len - l + 1] ==  0  && len != len - l + 1) continue;         for (long long i = 1; i <= x; ++i) putchar(s[i]);         putchar( + );         for (long long i = x + 1; i <= len - l; ++i) putchar(s[i]);         putchar( = );         for (long long i = len - l + 1; i <= len; ++i) putchar(s[i]);         exit(0);       }     }     for (long long l = x; l <= x + 1; ++l) {       if ((get(1, x, 10) + get(x + 1, len - l, 10)) ==           get(len - l + 1, len, 10)) {         flag = 1;         for (long long i = 0; i <= 3; ++i)           if (((get(1, x, i) + get(x + 1, len - l, i)) % mo[i] + mo[i]) % mo[i] !=               get(len - l + 1, len, i)) {             flag = 0;             break;           }         if (!flag) continue;         if (s[1] ==  0  && x != 1) continue;         if (s[x + 1] ==  0  && len - l != x + 1) continue;         if (s[len - l + 1] ==  0  && len != len - l + 1) continue;         for (long long i = 1; i <= x; ++i) putchar(s[i]);         putchar( + );         for (long long i = x + 1; i <= len - l; ++i) putchar(s[i]);         putchar( = );         for (long long i = len - l + 1; i <= len; ++i) putchar(s[i]);         exit(0);       }     }   }   int main() {     scanf( %s , s + 1);     len = strlen(s + 1);     hsh[0][4] = 0;     for (long long i = 1; i <= len; ++i)       hsh[i][10] = hsh[i - 1][10] * bas + s[i] - 48;     for (long long i = 1; i <= len; ++i)       for (long long j = 0; j <= 3; ++j)         hsh[i][j] = (hsh[i - 1][j] * bas + s[i] - 48) % mo[j];     for (long long i = 1; i <= len / 2 + 1; ++i) solve(i);   }   