#include <bits/stdc++.h>
using namespace std;
template <typename T>
T gcd(T x, T y) {
  if (x < y) swap(x, y);
  while (y > 0) {
    T f = x % y;
    x = y;
    y = f;
  }
  return x;
}
int n;
char s[222222];
const int MX = 9 * 222222;
pair<int, int> sol[MX];
int inStack[MX];
bool solve(long long r, int lp);
bool xsolve(int lp, pair<int, int>& s, int addFlag, int flagMask, const char* c,
            int val, int last, bool canAddPlus) {
  if (!*c) {
    auto x = make_pair(addFlag, val);
    if (val < 10) {
      s = x;
      return true;
    } else {
      if (solve(val, lp - 1)) {
        s = x;
        return true;
      }
    }
  } else {
    if (canAddPlus) {
      if (xsolve(lp, s, addFlag | flagMask, flagMask * 2, c + 1, val + *c - '0',
                 *c - '0', *c != '0'))
        return true;
    }
    if (xsolve(lp, s, addFlag, flagMask * 2, c + 1,
               (val - last) + last * 10 + *c - '0', last * 10 + *c - '0',
               *c != '0'))
      return true;
  }
  return false;
}
bool solve(long long r, int lp) {
  if (lp < 1 || r >= MX) return false;
  char s[20];
  sprintf(s, "%d", r);
  if (inStack[r]) return false;
  inStack[r] = true;
  bool ret = xsolve(lp, sol[r], 0, 1, s, 0, 0, false);
  inStack[r] = false;
  return ret;
}
char pp[222222];
long long pprr = 0;
bool xxsolve(char* c, char* plus, long long val, long long last,
             bool canAddPlus) {
  if (!*c) {
    if (solve(val, 2)) {
      pprr = val;
      return true;
    }
  } else {
    if (canAddPlus) {
      *plus = 1;
      int nskip = 1;
      while (*(c + nskip - 1) == '0' && *(c + nskip) == '0')
        *(plus + nskip) = 0, nskip++;
      if (xxsolve(c + nskip, plus + nskip, val + *c - '0', *c - '0',
                  1 || *c != '0'))
        return true;
    }
    if (last < 100000000000000ll) {
      *plus = 0;
      if (xxsolve(c + 1, plus + 1, (val - last) + last * 10 + *c - '0',
                  last * 10 + *c - '0', 1 || *c != '0'))
        return true;
    }
  }
  return false;
}
int main(int argc, char* argv[]) {
  std::cin.sync_with_stdio(false);
  std::cin.tie(nullptr);
  cin >> n >> s;
  {
    memset(pp, 0, sizeof(pp));
    if (!xxsolve(s, pp, 0, 0, false)) {
      printf("No solution :(\n");
      return 0;
    }
    for (int i = 0; i < n; i++) {
      if (pp[i]) putchar('+');
      putchar(s[i]);
    }
    putchar('\n');
    long long rr = pprr;
    sprintf(s, "%lld", rr);
    for (int l = 0; l < 2; l++) {
      auto ss = sol[rr];
      sprintf(s, "%lld", rr);
      int si = 0;
      for (char* c = s; *c; c++) {
        if (c != s && (ss.first & (1 << si))) {
          putchar('+');
        }
        putchar(*c);
        si++;
      }
      printf("\n");
      fflush(stdout);
      rr = ss.second;
      sprintf(s, "%lld", rr);
    }
  }
  return 0;
}
