func_code_string: #include <bits/stdc++.h>   using namespace std;   vector<string> split(const string& s, const string& delim =    ) {     vector<string> res;     string t;     for (int i = 0; i != s.size(); i++) {       if (delim.find(s[i]) != string::npos) {         if (!t.empty()) {           res.push_back(t);           t =   ;         }       } else {         t += s[i];       }     }     if (!t.empty()) {       res.push_back(t);     }     return res;   }   vector<int> splitInt(const string& s, const string& delim =    ) {     vector<string> tok = split(s, delim);     vector<int> res;     for (int i = 0; i != tok.size(); i++) res.push_back(atoi(tok[i].c_str()));     return res;   }   template <typename T>   void print(T a) {     cerr << a;   }   static void print(long long a) { cerr << a <<  L ; }   static void print(string a) { cerr <<     << a <<    ; }   template <typename T>   void print(vector<T> a) {     cerr <<  { ;     for (int i = 0; i != a.size(); i++) {       if (i != 0) cerr <<  ,  ;       print(a[i]);     }     cerr <<  }  << endl;   }   char flag[1000005];   int main() {     string s;     while (cin >> s) {       memset(flag, 0, sizeof(flag));       reverse(s.begin(), s.end());       for (int i = 0, _n = (s.size()); i < _n; i++) flag[i] = s[i] -  0 ;       int i = 0, n = s.size();       while (i < n) {         int count = 0;         while (i < n && flag[i + count] == 1) count++;         if (count > 1) {           for (int j = (i), _n = (i + count - 1); j <= _n; j++) flag[j] = 0;           flag[i] = -1;           flag[i + count] = 1;           i = i + count - 1;         }         i++;       }       int count = 0;       for (int i = 0, _n = (n + 3); i < _n; i++) count += (flag[i] != 0);       printf( %d n , count);       for (int i = (0), _n = (n + 3); i <= _n; i++)         if (flag[i] != 0) {           if (flag[i] < 0)             printf( - );           else             printf( + );           printf( 2^%d n , i);         }     }     return 0;   }   