#include <bits/stdc++.h>
using namespace std;
inline int setBit(int N, int pos) { return N = N | (1 << pos); }
inline int resetBit(int N, int pos) { return N = N & ~(1 << pos); }
inline bool checkBit(int N, int pos) { return (bool)(N & (1 << pos)); }
const int MAX = 200005;
int n, finalPass;
char str[MAX];
vector<string> moves;
int f(int val) {
  if (val < 10) return 0;
  int ret = 0, pass = 0;
  char str[100];
  string here = "";
  sprintf(str, "%d", val);
  int i, len = strlen(str);
  for (i = 0; i < len; i++) {
    if (i) here += "+";
    here += str[i];
    pass += (str[i] - '0');
  }
  moves.push_back(here);
  finalPass = pass;
  ret = 1 + f(pass);
  return ret;
}
void solve() {
  while (true) {
    moves.clear();
    string now = "", number = "";
    int i, tot = 0;
    for (i = 0; i < n; i++) {
      int what = rand() % 2;
      if ((int)number.size() == 2) what = 0;
      if ((int)number.size() == 0) what = 1;
      if (what == 1)
        number += str[i];
      else {
        now += number;
        tot += atoi(number.c_str());
        number = "";
        now += "+";
        number += str[i];
      }
    }
    if ((int)number.size()) {
      now += number;
      tot += atoi(number.c_str());
    }
    moves.push_back(now);
    if (tot < 10 || f(tot) <= 2) {
      if (tot < 10) {
        puts(moves[0].c_str());
        for (i = 0; i < 2; i++) printf("%d\n", tot);
        exit(0);
      }
      char str[100];
      sprintf(str, "%d", finalPass);
      number = str;
      while ((int)moves.size() < 3) moves.push_back(number);
      for (auto x : moves) puts(x.c_str());
      exit(0);
    }
  }
}
int main() {
  srand(time(NULL));
  scanf("%d", &n);
  scanf("%s", str);
  solve();
  return 0;
}
