#include <bits/stdc++.h>
using namespace std;
long long int P[] = {2147483647, 1147483661, 1147483721, 1147483723,
                     1147483751};
long long int INV[] = {1503238553, 1032735295, 1032735349, 344245117,
                       1032735376};
long long int R[5][1000010];
struct HV {
  long long int h[5];
  HV() { memset(h, 0, sizeof(h)); }
  void shr() {
    for (int i = 0; i < 5; i++) {
      h[i] = (h[i] * INV[i]) % P[i];
    }
  }
  void shl() {
    for (int i = 0; i < 5; i++) {
      h[i] = (h[i] * 10LL) % P[i];
    }
  }
  void add(long long int x, int pos) {
    for (int i = 0; i < 5; i++) {
      h[i] = (h[i] + x * R[i][pos]) % P[i];
    }
  }
  HV operator+(const HV &o) {
    HV ret;
    for (int i = 0; i < 5; i++) {
      ret.h[i] = (h[i] + o.h[i]) % P[i];
    }
    return ret;
  }
  bool operator==(const HV &o) {
    for (int i = 0; i < 5; i++) {
      if ((h[i] + P[i]) % P[i] != (o.h[i] + P[i]) % P[i]) {
        return false;
      }
    }
    return true;
  }
};
int n;
char input[1000010];
long long int nl[1000010];
int check(deque<long long int> &a, deque<long long int> &b,
          deque<long long int> &c, HV &ha, HV &hb, HV &hc) {
  if (a.size() == 0 || b.size() == 0 || c.size() == 0) {
    return 0;
  }
  if (a.size() > c.size() || b.size() > c.size()) {
    return 0;
  }
  if (a.size() != c.size() && b.size() != c.size() &&
      (a.size() + 1 != c.size()) && (b.size() + 1 != c.size())) {
    return 0;
  }
  if ((a.size() > 1 && a.back() == 0) || (b.size() > 1 && b.back() == 0) ||
      (c.size() > 1 && c.back() == 0)) {
    return 0;
  }
  if (ha + hb == hc) {
    for (int i = a.size() - 1; i >= 0; i--) {
      putchar(a[i] + '0');
    }
    putchar('+');
    for (int i = b.size() - 1; i >= 0; i--) {
      putchar(b[i] + '0');
    }
    putchar('=');
    for (int i = c.size() - 1; i >= 0; i--) {
      putchar(c[i] + '0');
    }
    putchar('\n');
    return 1;
  }
  return 0;
}
int main() {
  for (int i = 0; i < 5; i++) {
    R[i][0] = 1;
  }
  for (int j = 0; j < 5; j++) {
    for (int i = 1; i < 1000010; i++) {
      R[j][i] = (R[j][i - 1] * 10LL) % P[j];
    }
  }
  fgets(input, sizeof(input), stdin);
  n = strlen(input);
  if (input[n - 1] == '\n') {
    n -= 1;
  }
  for (int i = 0; i < n; i++) {
    nl[n - i - 1] = input[i] - '0';
  }
  {
    deque<long long int> a, b, c;
    HV ha, hb, hc;
    for (int i = 0; i < n; i++) {
      hc.add(nl[i], i);
      c.push_back(nl[i]);
    }
    for (int k = 1; k < n; k++) {
      long long int t = c.back();
      c.pop_back();
      hc.add(-t, c.size());
      b.push_front(t);
      hb.shl();
      hb.add(t, 0);
      if (check(a, b, c, ha, hb, hc)) {
        return 0;
      }
      while (c.size() <= b.size()) {
        long long int s = b.back();
        b.pop_back();
        hb.add(-s, b.size());
        a.push_front(s);
        ha.shl();
        ha.add(s, 0);
        if (check(a, b, c, ha, hb, hc)) {
          return 0;
        }
      }
    }
  }
  {
    deque<long long int> a, b, c;
    HV ha, hb, hc;
    for (int i = 0; i < n; i++) {
      hc.add(nl[i], i);
      c.push_back(nl[i]);
    }
    for (int k = 1; k < n; k++) {
      long long int t = c.back();
      c.pop_back();
      hc.add(-t, c.size());
      b.push_front(t);
      hb.shl();
      hb.add(t, 0);
      if (c.size() > a.size()) {
        long long int s = b.back();
        b.pop_back();
        hb.add(-s, b.size());
        a.push_front(s);
        ha.shl();
        ha.add(s, 0);
      }
      if (check(a, b, c, ha, hb, hc)) {
        return 0;
      }
      while (c.size() <= a.size()) {
        long long int s = a.front();
        a.pop_front();
        ha.add(-s, 0);
        ha.shr();
        hb.add(s, b.size());
        b.push_back(s);
        if (check(a, b, c, ha, hb, hc)) {
          return 0;
        }
      }
    }
  }
  return 0;
}
