#include <bits/stdc++.h>
using namespace std;
const int MOD(1000000007);
const int INF((1 << 30) - 1);
const int MAXN();
int main() {
  string a;
  cin >> a;
  int one = 0, zero = 0, n = a.size();
  vector<int> c, d, ans;
  d.push_back(n);
  for (int i = 0; i < a.size(); i++) {
    if (a[i] == '1') {
      one++;
      c.push_back(n - 1 - i);
    } else {
      if (i == a.size() - 1 || a[i + 1] == '0') {
        if (one < zero + 2) {
          for (int j = 0; j < c.size(); j++) ans.push_back(c[j]);
        } else {
          for (int j = 0; j < d.size(); j++) ans.push_back(d[j]);
          ans.push_back(-(n - 1 - (i - 1)));
        }
        one = zero = 0;
        c.clear();
        d.clear();
        while (i < a.size() && a[i + 1] != '1') i++;
        d.push_back(n - 1 - i);
      } else {
        zero++;
        d.push_back(-(n - 1 - i));
      }
    }
  }
  int chk = 0;
  if (one < zero + 2) {
    for (int j = 0; j < c.size(); j++) ans.push_back(c[j]);
  } else {
    for (int j = 0; j < d.size(); j++) ans.push_back(d[j]);
    chk = 1;
  }
  printf("%d\n", ans.size() + chk);
  for (int i = 0; i < ans.size(); i++) {
    if (ans[i] >= 0)
      printf("+");
    else
      printf("-");
    printf("2^%d\n", abs(ans[i]));
  }
  if (chk) printf("-2^0");
}
