#include <bits/stdc++.h>
using namespace std;
string s;
const int maxn = 1e6 + 7;
int ok[maxn];
vector<int> v1, v2;
int main() {
  memset(ok, 0, sizeof(ok));
  cin >> s;
  int sz = s.size();
  int now = -1;
  for (int i = 0; i < sz; i++) {
    if (s[i] == '0') {
      if (s[i - 1] == '1') {
        ok[now + 1] = 1;
        ok[i] = -1;
      }
      now = i;
    }
  }
  if (now != sz - 1) {
    ok[now + 1] = 1;
    ok[sz] = -1;
  }
  for (int i = 0; i < sz; i++) {
    if (ok[i] * ok[i + 1] < 0) {
      ok[i] = 0;
      ok[i + 1] = -ok[i + 1];
    } else if (ok[i] > 0) {
      v1.push_back(i);
    } else if (ok[i] < 0) {
      v2.push_back(i);
    }
  }
  if (ok[sz] > 0) v1.push_back(sz);
  if (ok[sz] < 0) v2.push_back(sz);
  int ans = v1.size() + v2.size();
  cout << ans << endl;
  for (int i = 0; i < v1.size(); i++) {
    printf("+2^%d\n", sz - v1[i]);
  }
  for (int i = 0; i < v2.size(); i++) {
    printf("-2^%d\n", sz - v2[i]);
  }
  return 0;
}
