#include <bits/stdc++.h>
using namespace std;
const int maxn = 1000010;
int n, m, f[maxn][2];
short g[maxn][2], h[maxn][2];
char s[maxn];
int main() {
  scanf("%s", s + 1);
  n = strlen(s + 1);
  memset(f, 60, sizeof(f));
  f[1][0] = 0;
  f[1][1] = 1;
  g[1][0] = 0;
  g[1][1] = 1;
  for (int i = 1; i <= n; i++) {
    for (int p = 0; p < 2; p++) {
      if (s[i] == '0') {
        if (p == 0) {
          if (f[i][p] < f[i + 1][p]) {
            f[i + 1][p] = f[i][p];
            g[i + 1][p] = 0;
            h[i + 1][p] = p;
          }
          if (f[i][p] + 1 < f[i + 1][1]) {
            f[i + 1][1] = f[i][p] + 1;
            g[i + 1][1] = 1;
            h[i + 1][1] = p;
          }
        } else {
          if (f[i][p] + 1 < f[i + 1][p]) {
            f[i + 1][p] = f[i][p] + 1;
            g[i + 1][p] = -1;
            h[i + 1][p] = p;
          }
        }
      } else {
        if (p == 0) {
          if (f[i][p] + 1 < f[i + 1][p]) {
            f[i + 1][p] = f[i][p] + 1;
            g[i + 1][p] = 1;
            h[i + 1][p] = p;
          }
        } else {
          if (f[i][p] + 1 < f[i + 1][0]) {
            f[i + 1][0] = f[i][p] + 1;
            g[i + 1][0] = -1;
            h[i + 1][0] = p;
          }
          if (f[i][p] < f[i + 1][1]) {
            f[i + 1][1] = f[i][p];
            g[i + 1][1] = 0;
            h[i + 1][1] = p;
          }
        }
      }
    }
  }
  int ans = f[n + 1][0];
  cout << ans << endl;
  int now = n + 1, p = 0;
  while (now >= 0) {
    if (g[now][p] == 1)
      cout << "+2^" << n + 1 - now << endl;
    else if (g[now][p] == -1)
      cout << "-2^" << n + 1 - now << endl;
    p = h[now][p];
    now--;
  }
}
