#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 9;
const int HM = 2;
int Hash[maxn][HM], mod[1000], rt;
int power[maxn][HM];
char que[maxn];
void getprime(int l, int r, int P[]) {
  int cnt = 0;
  for (int i = l; i <= r; ++i) {
    int flag = 0;
    for (int j = 2; j * j <= i; ++j)
      if (i % j == 0) flag = 1;
    if (flag == 0) P[cnt++] = i;
  }
}
bool cheak(int l1, int l2, int l3, int n) {
  if (l1 <= 0 || l2 <= 0 || l3 <= 0) return 0;
  if (l2 > l1 || l3 > l1) return 0;
  int cnt1 = 0, cnt2 = 0, cnt3 = 0;
  if (l1 != 1 && que[l3 + l2 + 1] == '0') return 0;
  if (l2 != 1 && que[l3 + 1] == '0') return 0;
  if (l3 != 1 && que[1] == '0') return 0;
  for (int i = 0; i < HM; ++i) {
    int tp1, tp2, tp3;
    tp1 = tp2 = tp3 = 0;
    tp1 = Hash[n][i] - Hash[n - l1][i] * power[l1][i] % mod[i];
    tp2 = Hash[n - l1][i] - Hash[l3][i] * power[l2][i] % mod[i];
    tp3 = Hash[l3][i];
    if ((tp2 + tp3 - tp1) % mod[i] != 0) return 0;
  }
  for (int i = 1; i <= l3; ++i) putchar(que[i]);
  putchar('+');
  for (int i = l3 + 1; i <= l2 + l3; ++i) putchar(que[i]);
  putchar('=');
  for (int i = l3 + l2 + 1; i <= n; ++i) putchar(que[i]);
  putchar('\n');
  return 1;
}
int main() {
  memset(Hash, 0, sizeof Hash);
  getprime(10007, 12005, mod);
  for (int i = 0; i < maxn; ++i)
    for (int j = 0; j < HM; ++j) power[i][j] = 1;
  rt = 10;
  scanf("%s", que + 1);
  int len = strlen(que + 1);
  for (int i = 1; i <= len; ++i) {
    for (int j = 0; j < HM; ++j)
      Hash[i][j] = (Hash[i - 1][j] * rt % mod[j] + que[i] - '0') % mod[j],
      power[i][j] = power[i - 1][j] * rt % mod[j];
  }
  for (int i = len; i >= 1 && i >= len / 4; --i) {
    if (cheak(len - i + 1, len - i + 1, len - 2 * (len - i + 1), len)) return 0;
    if (cheak(len - i + 1, len - i, len - 2 * (len - i) - 1, len)) return 0;
    if (cheak(len - i + 1, len - 2 * (len - i + 1), len - i + 1, len)) return 0;
    if (cheak(len - i + 1, len - 2 * (len - i) - 1, len - i, len)) return 0;
  }
  return 0;
}
