#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:65777216")
using namespace std;
char s[1111111];
int n;
int main() {
  gets(s);
  n = strlen(s);
  long long rrr = 0;
  for (int i(0); i < (n); i++) rrr = rrr * 2 + (s[i] - '0');
  vector<pair<int, int> > r;
  vector<pair<int, int> > v;
  int res = 0;
  for (int i(0); i < (n); i++) {
    int dig = s[i] - '0';
    if (v.size() && v.back().first == dig)
      v.back().second++;
    else
      v.push_back(pair<int, int>(dig, 1));
  }
  vector<pair<int, int> > w;
  swap(v, w);
  int sm = 0;
  for (int i(0); i < (w.size()); i++) {
    pair<int, int> curr = w[i];
    sm += curr.second;
    if (v.size() && v.back().first == 0 && v.back().second == 1 &&
        (curr.second > 1 || v.size() > 1 && v[v.size() - 2].second > 1)) {
      v.pop_back();
      v.back().second++;
      v.back().second += curr.second;
      r.push_back(pair<int, int>(0, n - (sm - curr.second)));
    } else
      v.push_back(curr);
  }
  int sum = 0;
  for (int i(0); i < (v.size()); i++) {
    if (v[i].first == 1) {
      if (v[i].second == 1) {
        r.push_back(pair<int, int>(1, n - sum - 1));
      } else {
        r.push_back(pair<int, int>(1, n - sum));
        r.push_back(pair<int, int>(0, n - sum - v[i].second));
      }
    }
    sum += v[i].second;
  }
  cout << r.size() << endl;
  long long t = 0;
  for (int i(0); i < (r.size()); i++) {
    printf("%c2^%d\n", r[i].first ? '+' : '-', r[i].second);
  }
  return 0;
}
