#include <bits/stdc++.h>
using namespace std;
uint64_t rnd_data = 0xDEADBEEFDULL;
inline void my_srand(int seed) { rnd_data = ((uint64_t)seed << 16) | 0x330E; }
inline int my_rand() {
  rnd_data = rnd_data * 0x5DEECE66DULL + 0xB;
  return (rnd_data >> 17) & 0x7FFFFFFF;
}
template <typename T>
void my_random_shuffle(T b, T e) {
  for (ssize_t i = 1; i < (e - b); i++) {
    swap(b[i], b[my_rand() % (i + 1)]);
  }
}
template <class _T>
inline _T sqr(const _T &x) {
  return x * x;
}
const long double PI = 3.1415926535897932384626433832795;
const long double EPS = 1e-9;
const int MAXN = 400000 * 9;
int l;
char s[202400];
int d[MAXN + 1];
int pa[MAXN + 1];
bool bad[101];
bool u[MAXN + 1];
bool ans[MAXN + 1];
int len(int x) {
  if (x < 10000) {
    if (x < 100) {
      if (x < 10)
        return 1;
      else
        return 2;
    } else {
      if (x < 1000)
        return 3;
      else
        return 4;
    }
  } else {
    if (x < 1000000) {
      if (x < 100000)
        return 5;
      else
        return 6;
    } else {
      if (x < 10000000)
        return 7;
      else
        return 8;
    }
  }
}
void precalc() {
  memset((bad), 0, sizeof(bad));
  for (int i = (1); i <= (int)(9); i++) {
    for (int j = (1); j <= (int)(9); j++) {
      if (i + j >= 10) {
        bad[i * 10 + j] = true;
      }
    }
  }
  for (int i = (1); i <= (int)(9); i++) {
    d[i] = 0;
  }
  int prev = -10000000;
  int cnt = 0;
  for (int i = (10); i <= (int)(MAXN); i++) {
    d[i] = 3;
    int k = len(i);
    int b[10];
    int x = i;
    int z = 0;
    for (int j = 0; j < (int)(k); j++) {
      b[j] = x % 10;
      x /= 10;
      z += b[j];
    }
    if (z < 10) {
      d[i] = 1;
      pa[i] = 0;
      continue;
    }
    if (!bad[z]) {
      d[i] = 2;
      pa[i] = 0;
      continue;
    }
    if (bad[z]) {
      d[i] = 3;
      pa[i] = 0;
    }
    for (int mask = 0; mask < (int)(1 << (k - 1)); mask++) {
      int sum = 0;
      int cur = 0;
      for (int j = (k)-1; j >= 0; j--) {
        cur = cur * 10 + b[j];
        if (!(mask & (1 << (k - j - 1)))) {
          sum += cur;
          cur = 0;
        }
      }
      if (sum == i) continue;
      if (d[sum] + 1 < d[i]) {
        d[i] = d[sum] + 1;
        pa[i] = mask;
      }
      if (d[i] == 2) break;
    }
    if (d[i] == 3) {
      int z = 0;
      for (int j = 0; j < (int)(k); j++) {
        z += b[j];
      }
      if (z == 19 || z == 28 || z == 37 || z == 46) {
        if (i - prev <= 9)
          cnt++;
        else
          cnt = 0;
        prev = i;
      }
    }
  }
}
void print_ans(int x) {
  for (int t = 0; t < (int)(2); t++) {
    int k = len(x);
    int mask = pa[x];
    int b[10];
    int q = x;
    int z = 0;
    for (int r = 0; r < (int)(k); r++) {
      b[r] = q % 10;
      q /= 10;
      z += b[r];
    }
    int sum = 0;
    int cur = 0;
    for (int j = (k)-1; j >= 0; j--) {
      cur = cur * 10 + b[j];
      printf("%d", b[j]);
      if (!(mask & (1 << (k - j - 1)))) {
        if (j) putchar('+');
        sum += cur;
        cur = 0;
      }
    }
    x = sum;
    puts("");
  }
}
void gen_in() {
  l = 98721;
  for (int i = 0; i < (int)(l - 1); i++) {
    s[i] = '9';
  }
  s[l - 1] = '1';
  s[l] = '\0';
}
int main() {
  cout << setiosflags(ios::fixed) << setprecision(10);
  precalc();
  scanf("%d", &l);
  scanf("%s", s);
  int sum = 0;
  for (int i = 0; i < (int)(l); i++) {
    sum += s[i] - '0';
  }
  for (int st = (1); st <= (int)(6); st++) {
    int ss = sum;
    int s0 = 0;
    int w = st - 1;
    memset((ans), 0, sizeof(ans));
    for (int i = 0; i < (int)(st); i++) {
      ss -= s[i] - '0';
      s0 = s0 * 10 + s[i] - '0';
      if (i < st - 1) ans[i] = true;
    }
    ss += s0;
    for (;;) {
      if (d[ss] <= 2) {
        for (int i = 0; i < (int)(l); i++) {
          printf("%c", s[i]);
          if (i < l - 1 && !ans[i]) putchar('+');
        }
        puts("");
        print_ans(ss);
        return 0;
      }
      w++;
      while (w < l - 1 && s[w] == '0') w++;
      if (w >= l - 1) break;
      ans[w] = true;
      ss += (s[w] - '0') * 9;
      if (ss >= MAXN) break;
      w++;
    }
  }
  return 239;
  if (d[sum] <= 2) {
    for (int i = 0; i < (int)(l); i++) {
      if (i) putchar('+');
      printf("%c", s[i]);
    }
    puts("");
    print_ans(sum);
  } else {
    memset((u), 0, sizeof(u));
    memset((ans), 0, sizeof(ans));
    for (int i = 0; i < (int)(l); i++) {
      if (s[i] == '0') u[i] = true;
    }
    for (;;) {
      int x;
      do {
        x = my_rand() % (l - 1);
      } while (u[x]);
      ans[x] = true;
      u[x] = true;
      u[x + 1] = true;
      if (x > 0) u[x - 1] = true;
      sum += (s[x] - '0') * 9;
      if (d[sum] <= 2) break;
    }
    for (int i = 0; i < (int)(l); i++) {
      if (i && !ans[i]) putchar('+');
      printf("%c", s[i]);
    }
    puts("");
    print_ans(sum);
  }
  return 0;
}
