#include <bits/stdc++.h>
using namespace std;
const int iinf = 1e9 + 7;
const int oo = 0x3f3f3f3f;
const long long linf = 1ll << 60;
const double dinf = 1e60;
template <typename T>
inline void scf(T &x) {
  bool f = 0;
  x = 0;
  char c = getchar();
  while (c != '-' && (c < '0' || c > '9')) c = getchar();
  if (c == '-') f = 1, c = getchar();
  while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
  if (f) x = -x;
  return;
}
template <typename T1, typename T2>
void scf(T1 &x, T2 &y) {
  scf(x);
  return scf(y);
}
template <typename T1, typename T2, typename T3>
void scf(T1 &x, T2 &y, T3 &z) {
  scf(x);
  scf(y);
  return scf(z);
}
template <typename T1, typename T2, typename T3, typename T4>
void scf(T1 &x, T2 &y, T3 &z, T4 &w) {
  scf(x);
  scf(y);
  scf(z);
  return scf(w);
}
inline char mygetchar() {
  char c = getchar();
  while (c == ' ' || c == '\n') c = getchar();
  return c;
}
template <typename T>
inline bool chkmax(T &x, const T &y) {
  return y > x ? x = y, 1 : 0;
}
template <typename T>
inline bool chkmin(T &x, const T &y) {
  return y < x ? x = y, 1 : 0;
}
vector<int> n;
bool check(int x) {
  n.clear();
  while (x) {
    n.push_back(x % 10);
    x /= 10;
  }
  reverse(n.begin(), n.end());
  int m = (int)n.size() - 1;
  for (int s = 0, _end_ = (1 << m); s < _end_; ++s) {
    int x = 0, y = 0;
    for (int i = (0), _end_ = (m); i <= _end_; ++i) {
      (y *= 10) += n[i];
      if (i == m || (s & (1 << i))) {
        x += y;
        y = 0;
      }
    }
    y = 0;
    while (x) {
      y += x % 10;
      x /= 10;
    }
    if (y < 10) {
      return 1;
    }
  }
  return 0;
}
int N, sum;
int a[200009];
bool f[2000009], g[200009];
long long dp[200009], B = 4503599627370495ll;
vector<int> rem[100];
int G(int x) {
  if (x < 10) {
    printf("%d\n", x);
    return x;
  }
  n.clear();
  while (x) {
    n.push_back(x % 10);
    x /= 10;
  }
  if (!(int)n.size()) {
    puts("fuck");
    exit(0);
  }
  reverse(n.begin(), n.end());
  int m = (int)n.size() - 1;
  for (int s = 0, _end_ = (1 << m); s < _end_; ++s) {
    int x = 0, y = 0, z = 0;
    for (int i = (0), _end_ = (m); i <= _end_; ++i) {
      (y *= 10) += n[i];
      if (i == m || (s & (1 << i))) {
        x += y;
        y = 0;
      }
    }
    z = x;
    y = 0;
    while (x) {
      y += x % 10;
      x /= 10;
    }
    if (y < 10) {
      for (int i = 0, _end_ = (m); i < _end_; ++i) {
        printf("%d", n[i]);
        if (s & (1 << i)) {
          putchar('+');
        }
      }
      printf("%d\n", n.back());
      return z;
    }
  }
}
void output(int m) {
  for (int i = (N - 1), _end_ = (1); i >= _end_; --i) {
    long long t = dp[i] ^ dp[i + 1];
    while (t) {
      long long s = (t & (-t));
      int j = __builtin_ctzll(s);
      if (j < a[i]) {
        puts("fuck");
        exit(0);
      }
      rem[j] = rem[j - a[i]];
      rem[j].push_back(i);
      t ^= s;
    }
  }
  sum += m * 9;
  for (int i : rem[m]) {
    g[i] = 1;
  }
  g[N] = 1;
  for (int i = (1), _end_ = (N); i <= _end_; ++i) {
    printf("%d", a[i]);
    if (!g[i]) {
      putchar('+');
    }
  }
  putchar('\n');
  sum = G(sum);
  if (!sum) {
    for (;;) {
      sum += rand();
    }
  }
  vector<int> a;
  a.clear();
  while (sum) {
    a.push_back(sum % 10);
    sum /= 10;
  }
  if (!(int)a.size()) {
    puts("fuck");
    exit(0);
  }
  reverse(a.begin(), a.end());
  for (int i = 0, _end_ = ((int)a.size() - 1); i < _end_; ++i) {
    printf("%d+", a[i]);
  }
  printf("%d\n", a.back());
  return;
}
int main() {
  for (int i = (0), _end_ = (9); i <= _end_; ++i) {
    f[i] = 1;
  }
  for (int i = (10), _end_ = (1900000); i <= _end_; ++i) {
    f[i] = check(i);
  }
  static char s[200009];
  scanf("%d%s", &N, s);
  sum = 0;
  for (int i = (1), _end_ = (N); i <= _end_; ++i) {
    a[i] = s[i - 1] - '0';
    sum += a[i];
  }
  if (N == 1 && !a[1]) {
    puts("0");
    puts("0");
    puts("0");
    return 0;
  }
  dp[N] = dp[N + 1] = 1;
  for (int i = (N - 1), _end_ = (1); i >= _end_; --i) {
    dp[i] = (dp[i + 1] | ((dp[i + 2] & B) << a[i]));
  }
  for (long long i = 0, s = 1; i < 52; ++i, s <<= 1) {
    if ((dp[1] & s) && f[sum + i * 9]) {
      output(i);
      return 0;
    }
  }
}
