#include <bits/stdc++.h>
using namespace std;
struct Tans {
  char order;
  int val;
};
const int maxn = 1000007;
int n, m;
char ch[maxn];
Tans ans[maxn * 2];
void count(int fir, int lst) {
  ans[++m].order = '+', ans[m].val = n - fir + 1;
  ans[++m].order = '-', ans[m].val = n - lst;
  for (int i = fir; i <= lst; i++)
    if (ch[i] == '0') ans[++m].order = '-', ans[m].val = n - i;
}
void work() {
  n = strlen(ch + 1);
  m = 0;
  int Beg, End, tot;
  for (int i = n; i >= 1; i--)
    if (ch[i] == '1') {
      Beg = End = i;
      tot = 1;
      break;
    }
  while (Beg > 1) {
    if (ch[Beg - 1] == '1') {
      tot++;
      Beg--;
      continue;
    }
    if (ch[Beg - 1] == '0') {
      if (ch[Beg] == '1') {
        if (tot > 1)
          Beg--;
        else {
          ans[++m].order = '+', ans[m].val = n - Beg;
          for (int i = Beg - 1; i >= 1; i--)
            if (ch[i] == '1') {
              Beg = End = i;
              tot = 1;
              break;
            }
        }
        continue;
      }
      if (ch[Beg] == '0') {
        count(Beg + 1, End);
        for (int i = Beg - 1; i >= 1; i--)
          if (ch[i] == '1') {
            Beg = End = i;
            tot = 1;
            break;
          }
        continue;
      }
    }
  }
  if (Beg < End)
    count(Beg, End);
  else
    ans[++m].order = '+', ans[m].val = n - Beg;
  printf("%d\n", m);
  for (int i = 1; i <= m; i++) printf("%c2^%d\n", ans[i].order, ans[i].val);
}
int main() {
  while (scanf("%s", ch + 1) != EOF) work();
}
