func_code_string: #include <bits/stdc++.h>   using namespace std;   const int INF = 1e9;   const int Mod = 1e9 + 7;   const int Mod2 = 49157;   const int p = 10;   inline long long Read() {     long long Ans = 0;     char Ch = getchar(), Las =    ;     while (!isdigit(Ch)) {       Las = Ch;       Ch = getchar();     }     while (isdigit(Ch)) {       Ans = (Ans << 3) + (Ans << 1) + Ch -  0 ;       Ch = getchar();     }     if (Las ==  - ) Ans = -Ans;     return Ans;   }   inline void Write(long long x) {     if (x < 0) {       x = -x;       putchar( - );     }     if (x >= 10) Write(x / 10);     putchar(x % 10 +  0 );   }   unsigned long long Hash[1000010], Hash2[1000010], idx[1000010], Pow[1000010],       Pow2[1000010];   unsigned long long a, b, c;   unsigned long long a2, b2, c2;   int Left_a, Right_a, Left_b, Right_b, Left_c, Right_c, Len;   bool Flag;   string s;   inline void Get_Hash() {     Pow[0] = 1;     Pow2[0] = 1;     for (int i = 1; i <= 1000010 / 2; i++) {       Pow[i] = Pow[i - 1] * p % Mod;       Pow2[i] = Pow2[i - 1] * p % Mod2;     }     idx[0] = s[0] -  0 ;     Hash[0] = idx[0];     Hash2[0] = idx[0];     for (int i = 1; i < Len; i++) {       idx[i] = s[i] -  0 ;       Hash[i] = (Hash[i - 1] * p + idx[i]) % Mod;       Hash2[i] = (Hash2[i - 1] * p + idx[i]) % Mod2;     }   }   inline unsigned long long Cmp_Hash(int Left, int Right) {     if (Left == 0) return Hash[Right];     return (Hash[Right] + Mod - (Hash[Left - 1] * Pow[Right - Left + 1]) % Mod) %            Mod;   }   inline unsigned long long Cmp_Hash2(int Left, int Right) {     if (Left == 0) return Hash2[Right];     return (Hash2[Right] + Mod2 -             (Hash2[Left - 1] * Pow2[Right - Left + 1]) % Mod2) %            Mod2;   }   int main() {     cin >> s;     Len = s.size();     Get_Hash();     int j;     for (int i = 1; i <= Len / 2; i++) {       if (i > 1 and idx[0] == 0) break;       a = Cmp_Hash(0, i - 1);       a2 = Cmp_Hash2(0, i - 1);       if (i < Len / 3 + 1) {         j = (Len - i) / 2;         if (!(idx[i] == 0 and j > 1) and !(Len - i - j > 1 and idx[i + j] == 0)) {           b = Cmp_Hash(i, i + j - 1);           b2 = Cmp_Hash2(i, i + j - 1);           c = Cmp_Hash(i + j, Len - 1);           c2 = Cmp_Hash2(i + j, Len - 1);           if ((a + b) % Mod == c % Mod and (a2 + b2) % Mod2 == c2 % Mod2) {             Flag = 1, Left_a = 0, Right_a = i - 1, Left_b = i;             Right_b = i + j - 1, Left_c = i + j, Right_c = Len - 1;             break;           }         }         j = (Len - i - 1) / 2;         if (!(idx[i] == 0 and j > 1) and !(Len - i - j > 1 and idx[i + j] == 0)) {           b = Cmp_Hash(i, i + j - 1);           b2 = Cmp_Hash2(i, i + j - 1);           c = Cmp_Hash(i + j, Len - 1);           c2 = Cmp_Hash2(i + j, Len - 1);           if ((a + b) % Mod == c % Mod and (a2 + b2) % Mod2 == c2 % Mod2) {             Flag = 1, Left_a = 0, Right_a = i - 1, Left_b = i;             Right_b = i + j - 1, Left_c = i + j, Right_c = Len - 1;             break;           }         }       }       if (i > (Len - 1) / 3 - 1) {         j = Len - 2 * i;         if (!(idx[i] == 0 and j > 1) and !(Len - i - j > 1 and idx[i + j] == 0)) {           b = Cmp_Hash(i, i + j - 1);           b2 = Cmp_Hash2(i, i + j - 1);           c = Cmp_Hash(i + j, Len - 1);           c2 = Cmp_Hash2(i + j, Len - 1);           if ((a + b) % Mod == c % Mod and (a2 + b2) % Mod2 == c2 % Mod2) {             Flag = 1, Left_a = 0, Right_a = i - 1, Left_b = i;             Right_b = i + j - 1, Left_c = i + j, Right_c = Len - 1;             break;           }         }         j = Len - 2 * i - 1;         if (!(idx[i] == 0 and j > 1) and !(Len - i - j > 1 and idx[i + j] == 0)) {           b = Cmp_Hash(i, i + j - 1);           b2 = Cmp_Hash2(i, i + j - 1);           c = Cmp_Hash(i + j, Len - 1);           c2 = Cmp_Hash2(i + j, Len - 1);           if ((a + b) % Mod == c % Mod and (a2 + b2) % Mod2 == c2 % Mod2) {             Flag = 1, Left_a = 0, Right_a = i - 1, Left_b = i;             Right_b = i + j - 1, Left_c = i + j, Right_c = Len - 1;             break;           }         }       }       if (Flag == 1) break;     }     if (Flag == 1) {       for (int i = Left_a; i <= Right_a; i++) Write(idx[i]);       putchar( + );       for (int i = Left_b; i <= Right_b; i++) Write(idx[i]);       putchar( = );       for (int i = Left_c; i <= Right_c; i++) Write(idx[i]);       puts(  );     }     return 0;   }   