#include <bits/stdc++.h>
using namespace std;
typedef struct {
  int sum, suf, pre, max;
} Node;
int toint(const string &s) {
  stringstream ss;
  ss << s;
  int x;
  ss >> x;
  return x;
}
const int MAXN = 3010;
const int UP = 31;
const long long int mod = 1e9 + 7;
const long long int highest = 1e18;
const double pi = acos(-1);
const double Phi = 1.618033988749894;
const int logn = 20;
const double phi = 0.618033988749894;
const double root5 = 2.236067977;
const int N = 1e6 + 10;
vector<pair<int, int> > res;
int n;
int main() {
  string s;
  cin >> s;
  reverse(s.begin(), s.end());
  s += '0';
  s += '0';
  int last = 0;
  for (int i = 0; i < s.length(); ++i) {
    if (s[i] == 1 - last + '0') {
      last = s[i + 1] - '0';
      res.push_back(make_pair(i, (last == 0 ? 1 : -1)));
    }
  }
  int x = (int)res.size();
  cout << (x) << "\n";
  for (int i = 0; i < x; ++i) {
    if (res[i].second < 0) {
      printf("-2^%d\n", res[i].first);
    } else {
      printf("+2^%d\n", res[i].first);
    }
  }
  cout << "\n";
  return 0;
}
