func_code_string: #include <bits/stdc++.h>   using namespace std;   stringstream ans;   int final_sum;   string print_line(string a0) {     int S = 0;     for (int i = 0; i < a0.size() - 1; i++) {       int digit = a0[i] -  0 ;       S += digit;       ans << digit <<  + ;     }     int digit = a0[a0.size() - 1] -  0 ;     S += digit;     ans << digit << endl;     final_sum = S;     return to_string(S);   }   void print289(string a0) { print_line(print_line(print_line(a0))); }   void print999(string a0, int S, int offset = 0) {     ans.str(  );     int i = 0;     int nz = 0;     int dt = 0;     int ddd = 0;     while (i < offset) {       ans << a0[i] <<  + ;       dt = 10 * dt + a0[i] -  0 ;       ddd += a0[i] -  0 ;       i++;     }     for (i += 1; i < a0.size() - 1; i += 2) {       int a = a0[i - 1] -  0 ;       int b = a0[i] -  0 ;       int dt = 10 * a + b - a - b;       S += dt;       ans << a << b <<  + ;       if (S >= 1000) break;     }     if (S < 1000 && i < a0.size()) {       int a = a0[i - 1] -  0 ;       int b = a0[i] -  0 ;       int dt = 10 * a + b - a - b;       S += dt;       ans << a << b;     }     i++;     for (i; i < a0.size() - 1; i++) ans << a0[i] <<  + ;     for (i; i < a0.size(); i++) ans << a0[a0.size() - 1];     ans << endl;     print_line(print_line(to_string(S)));   }   bool is_close(int S) {     if (S == 0) return true;     int div = 1;     while (S / div > 0) div *= 10;     if (S * 10 == div) return true;     return div - S < 1000;   }   bool is_mega_close(int S) {     if (S == 0) return true;     int div = 1;     while (S / div > 0) div *= 10;     if (S * 10 == div) return true;     return S - (div / 10) < 100;   }   void print(string a0, int S, int offset = 0) {     ans.str(  );     int i = 0;     int nz = 0;     int dt = 0;     int ddd = 0;     while (i < offset) {       ans << a0[i] <<  + ;       dt = dt * 10 + a0[i];       ddd += a0[i] -  0 ;       i++;     }     if (!is_close(S)) {       for (i += 2; i < a0.size() - 2; i += 3) {         int a = a0[i - 2] -  0 ;         int b = a0[i - 1] -  0 ;         int c = a0[i] -  0 ;         int dt = 100 * a + 10 * b + c - a - b - c;         S += dt;         ans << a << b << c <<  + ;         if (is_close(S)) break;       }       if (i < a0.size() - 2) i++;     }     if (!is_mega_close(S))       for (i += 2; i < a0.size() - 2; i += 3) {         int a = a0[i - 2] -  0 ;         int b = a0[i - 1] -  0 ;         int c = a0[i] -  0 ;         int dt = 9 * a;         S += dt;         ans << a << b <<  +  << c <<  + ;         if (is_mega_close(S)) break;       }     if (i >= a0.size() - 2)       i -= 2;     else       i++;     for (i; i < a0.size() - 1; i++) ans << a0[i] <<  + ;     for (i; i < a0.size(); i++) ans << a0[a0.size() - 1];     ans << endl;     print_line(print_line(to_string(S)));   }   int main() {     int n;     cin >> n;     string a0;     cin >> a0;     int S = 0;     for (int i = 0; i < a0.size(); i++) {       int digit = a0[i] -  0 ;       S += digit;     }     if (S < 199) {       print289(a0);       cout << ans.str();       return 0;     }     if (S < 1000) {       print999(a0, S);       int k = 1;       while (final_sum > 9 && k < 2) print999(a0, S, k++);       if (false && n == 155096) {         cout << k << endl;         cout << final_sum << endl;         return 0;       }       cout << ans.str();       return 0;     }     print(a0, S);     int k = 1;     while (final_sum > 9 && k < 3) print(a0, S, k++);     cout << ans.str();     return 0;   }   