#include <bits/stdc++.h>
using namespace std;
const int MAXL = 1000050;
char a[MAXL];
int ones[MAXL];
int f[MAXL][2];
bool cs[MAXL][2];
int main() {
  gets(a);
  int n = strlen(a);
  int last1;
  for (int i = n - 1; i >= 0; i--)
    if (a[i] == '1') {
      last1 = i;
      break;
    }
  ones[0] = a[0] == '1';
  for (int i = 1; i < n; i++) ones[i] = ones[i - 1] + (a[i] == '1');
  cs[last1][0] = true;
  f[last1][0] = 1;
  cs[last1][1] = true;
  f[last1][1] = 1;
  for (int i = last1 - 1; i >= 0; i--) {
    for (int t = 0; t < 2; t++) {
      int ch = a[i] - '0';
      if (t == 1) ch = 1 - ch;
      if (ch == 0) {
        f[i][t] = f[i + 1][t];
        cs[i][t] = true;
      } else {
        f[i][t] = f[i + 1][t] + 1;
        cs[i][t] = true;
      }
    }
    for (int t = 0; t < 2; t++) {
      if (f[i][1 - t] + 1 < f[i][t]) {
        f[i][t] = f[i][1 - t] + 1;
        cs[i][t] = false;
      }
    }
  }
  bool flag = true;
  int ans = f[0][0], t = 0;
  if (f[0][1] + 1 < ans) {
    ans = f[0][1] + 1;
    flag = false;
    t = 1;
  }
  printf("%d\n", ans);
  if (!flag) printf("+2^%d\n", n);
  for (int i = 0; i <= last1; i++) {
    if (cs[i][t] == false) {
      if (flag)
        printf("+");
      else
        printf("-");
      printf("2^%d\n", n - i);
      flag = !flag;
      t = 1 - t;
    }
    int ch = a[i] - '0';
    if (t == 1 && i < last1) ch = 1 - ch;
    if (ch == 1) {
      if (flag)
        printf("+");
      else
        printf("-");
      printf("2^%d\n", n - i - 1);
    }
  }
  return 0;
}
