#include <bits/stdc++.h>
using namespace std;
const int MAX = 1000 * 1000 + 10;
int d[MAX + 10][2];
int p[MAX + 10][2];
int cntone[MAX + 10];
vector<int> out;
int outs;
string s;
int n;
void dyn() {
  n = (int)s.size();
  for (int i = n - 1; i >= 0; i--) cntone[i] = cntone[i + 1] + s[i] - '0';
  for (int i = n - 1; i >= 0; i--) {
    if (s[i] == '0') {
      if (d[i + 1][0] <= d[i + 1][1] + 1) {
        d[i][0] = d[i + 1][0];
        p[i][0] = 0;
      } else {
        d[i][0] = d[i + 1][1] + 1;
        p[i][0] = 2;
      }
    } else {
      if (d[i + 1][0] <= d[i + 1][1]) {
        d[i][0] = d[i + 1][0] + 1;
        p[i][0] = 1;
      } else {
        d[i][0] = d[i + 1][1] + 1;
        p[i][0] = 2;
      }
    }
    if (cntone[i] == 0) {
      d[i][1] = 1;
      p[i][1] = 3;
    } else if (cntone[i] == 1 && s[i] == '1') {
      d[i][1] = 1;
      p[i][1] = 4;
    } else if (s[i] == '1') {
      if (d[i + 1][1] <= d[i + 1][0] + 1) {
        d[i][1] = d[i + 1][1];
        p[i][1] = 0;
      } else {
        d[i][1] = d[i + 1][0] + 1;
        p[i][1] = 2;
      }
    } else {
      if (d[i + 1][1] <= d[i + 1][0]) {
        d[i][1] = d[i + 1][1] + 1;
        p[i][1] = 1;
      } else {
        d[i][1] = d[i + 1][0] + 1;
        p[i][1] = 2;
      }
    }
  }
}
void par(int a, bool k) {
  if (a == n) return;
  if (p[a][k] == 0)
    par(a + 1, k);
  else if (p[a][k] == 1) {
    out.push_back(n - a - 1);
    outs++;
    par(a + 1, k);
  } else if (p[a][k] == 2) {
    out.push_back(n - a);
    out.push_back(-1);
    outs++;
    par(a + 1, !k);
  } else if (p[a][k] == 3) {
    out.push_back(n - a);
    outs++;
  } else {
    out.push_back(n - a - 1);
    outs++;
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin >> s;
  dyn();
  par(0, 0);
  int j = 1;
  cout << outs << endl;
  for (int i = 0; i < (int)out.size(); i++) {
    if (out[i] == -1) {
      j *= -1;
      continue;
    }
    if (j == 1)
      cout << "+2^";
    else
      cout << "-2^";
    cout << out[i] << endl;
  }
  return 0;
}
