#include <bits/stdc++.h>
void go(int &t, int &tr, int d, int r, int j) {
  if (r) d++;
  if (t < d) return;
  t = d;
  tr = j * 4 + r + 1;
}
int main() {
  char s[1000010];
  assert(scanf("%s", s + 1) == 1);
  s[0] = '0';
  int n = strlen(s);
  int d[n + 1][2], r[n + 1][2];
  memset(d, 0x7f, sizeof(d[0][0]) * (n + 1) * 2);
  d[0][0] = 0, r[0][0] = 0;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < 2; j++) {
      if (d[i][j] > n) continue;
      if (!j && s[i] == '0') {
        go(d[i + 1][0], r[i + 1][0], d[i][j], 0, j);
        go(d[i + 1][1], r[i + 1][1], d[i][j], 1, j);
      } else if (!j && s[i] == '1') {
        go(d[i + 1][0], r[i + 1][0], d[i][j], 1, j);
      } else if (j && s[i] == '0') {
        go(d[i + 1][1], r[i + 1][1], d[i][j], -1, j);
      } else if (j && s[i] == '1') {
        go(d[i + 1][0], r[i + 1][0], d[i][j], -1, j);
        go(d[i + 1][1], r[i + 1][1], d[i][j], 0, j);
      }
    }
  int rr = 0;
  int ans_p[d[n][rr]], ans_k[d[n][rr]], ans = d[n][rr];
  for (int i = n; i > 0; i--) {
    int nr = r[i][rr] / 4;
    int t = r[i][rr] % 4 - 1;
    if (t) ans_p[d[i][rr] - 1] = n - i, ans_k[d[i][rr] - 1] = t;
    rr = nr;
  }
  printf("%d\n", ans);
  for (int i = 0; i < ans; i++)
    printf("%c2^%d\n", ans_k[i] > 0 ? '+' : '-', ans_p[i]);
  return 0;
}
