#include <bits/stdc++.h>
using namespace std;
struct node {
  int fst, sed;
} v[1 << 23];
bool o1[1 << 23];
int o2[1 << 23], en, ve;
char s[1 << 23];
int main() {
  int i, len, pre = -1, l1, l2;
  scanf("%s", s);
  len = strlen(s);
  for (i = len - 1; i >= 0;) {
    while (i >= 0 && s[i] == '0') i--;
    if (i < 0) break;
    pre = i;
    while (i >= 0 && s[i] == '1') i--;
    v[ve].fst = len - 1 - pre;
    v[ve++].sed = len - 2 - i;
  }
  for (i = 1; i < ve; i++) {
    if (v[i - 1].sed + 2 < v[i].fst) continue;
    l1 = v[i - 1].sed - v[i - 1].fst + 1;
    l2 = v[i].sed - v[i].fst + 1;
    if (l1 == 1 && l2 == 1) continue;
    o1[en] = 0;
    o2[en++] = v[i].fst - 1;
    v[i].fst = v[i - 1].fst;
    v[i - 1].fst = -1;
  }
  for (i = 0; i < ve; i++) {
    if (v[i].fst == -1) continue;
    if (v[i].sed == v[i].fst) {
      o1[en] = true;
      o2[en++] = v[i].fst;
      continue;
    }
    o1[en] = 0;
    o2[en++] = v[i].fst;
    o1[en] = 1;
    o2[en++] = v[i].sed + 1;
  }
  printf("%d\n", en);
  for (i = 0; i < en; i++) printf("%c2^%d\n", o1[i] ? '+' : '-', o2[i]);
  return 0;
}
