#include <bits/stdc++.h>
using namespace std;
vector<pair<int, int> > v;
vector<pair<bool, int> > out;
char s[1 << 20];
int main() {
  int i, len, pre = -1, l1, l2;
  scanf("%s", s);
  len = strlen(s);
  for (i = len - 1; i >= 0;) {
    while (i >= 0 && s[i] == '0') i--;
    if (i < 0) break;
    pre = i;
    while (i >= 0 && s[i] == '1') i--;
    v.push_back(make_pair(len - 1 - pre, len - 2 - i));
  }
  for (i = 1; i < v.size(); i++) {
    if (v[i - 1].second + 2 < v[i].first) continue;
    l1 = v[i - 1].second - v[i - 1].first + 1;
    l2 = v[i].second - v[i].first + 1;
    if (l1 == 1 && l2 == 1) continue;
    out.push_back(make_pair(false, v[i].first - 1));
    v[i].first = v[i - 1].first;
    v[i - 1].first = -1;
  }
  for (i = 0; i < v.size(); i++) {
    if (v[i].first == -1) continue;
    if (v[i].second == v[i].first) {
      out.push_back(make_pair(true, v[i].first));
      continue;
    }
    out.push_back(make_pair(false, v[i].first));
    out.push_back(make_pair(true, v[i].second + 1));
  }
  printf("%d\n", out.size());
  for (i = 0; i < out.size(); i++)
    printf("%c2^%d\n", out[i].first ? '+' : '-', out[i].second);
  return 0;
}
