#include <bits/stdc++.h>
using namespace std;
int main() {
  string s;
  cin >> s;
  int prev = 2, count = 0;
  vector<pair<int, int> > v;
  vector<int> p;
  vector<int> l;
  vector<int> r;
  for (int i = s.length() - 1; i >= 0; i--) {
    int newp = s[i] - '0';
    if (prev == 2)
      prev = newp;
    else if (prev != newp) {
      v.push_back(make_pair(prev, count));
      p.push_back(0);
      l.push_back(0);
      r.push_back(0);
      count = 0;
      prev = newp;
    }
    count++;
  }
  if (count > 0) {
    v.push_back(make_pair(prev, count));
    p.push_back(0);
    l.push_back(0);
    r.push_back(0);
  }
  int offset = 0;
  for (int i = 0; i < v.size(); i++)
    if (v[i].first == 1 && v[i].second > 1) {
      p[i] = 1;
    }
  for (int i = 1; i < v.size() - 1; i++)
    if (v[i].first == 0 && v[i].second == 1 && (p[i - 1] || p[i + 1])) {
      p[i] = 1;
      r[i - 1] = 1;
      p[i - 1] = 1;
      l[i + 1] = 1;
      p[i + 1] = 1;
    }
  for (int i = v.size() - 2; i > 0; i--)
    if (v[i].first == 0 && v[i].second == 1 && (p[i - 1] || p[i + 1])) {
      p[i] = 1;
      r[i - 1] = 1;
      p[i - 1] = 1;
      l[i + 1] = 1;
      p[i + 1] = 1;
    }
  vector<int> minus, plus;
  for (int i = 0; i < v.size(); i++) {
    if (v[i].first == 0 && p[i] == 1) {
      minus.push_back(offset);
      offset++;
    } else if (v[i].first == 0) {
      offset += v[i].second;
    } else if (v[i].second == 1 && p[i] == 0) {
      plus.push_back(offset);
      offset += v[i].second;
    } else {
      if (l[i] == 0) minus.push_back(offset);
      offset += v[i].second;
      if (r[i] == 0) plus.push_back(offset);
    }
  }
  cout << minus.size() + plus.size() << endl;
  for (int i = 0; i < minus.size(); i++) cout << "-2^" << minus[i] << endl;
  for (int i = 0; i < plus.size(); i++) cout << "+2^" << plus[i] << endl;
}
