#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:64000000")
using namespace std;
char c[1000100];
vector<int> ans;
int main() {
  string s;
  gets(c);
  s = c;
  int n = s.size();
  reverse(s.begin(), s.end());
  for (int i = 0; i < n;) {
    if (s[i] == '0') {
      i++;
      continue;
    }
    int j = i;
    int p = 0, maxx = 0;
    for (; j < n && !(s[j] == '0' && ((j + 1 == n) ? (1) : (s[j + 1] == '0')));
         j++) {
      if (s[j] == '1')
        p++;
      else
        p = 0;
      if (maxx < p) maxx = p;
    }
    if (maxx > 1)
      for (int k = i; k < j; k++) {
        if (s[k] == '0') {
          s[k] = '1';
          if (k != 0)
            ans.push_back(-k);
          else
            ans.push_back(-(1 << 30));
        }
      }
    i = j;
  }
  for (int i = 0; i < n;) {
    if (s[i] == '0') {
      i++;
      continue;
    }
    int j = i;
    for (; j < n && s[i] == s[j]; j++)
      ;
    if (j != i + 1) {
      ans.push_back(j);
      if (i != 0)
        ans.push_back(-i);
      else
        ans.push_back(-(1 << 30));
    } else
      ans.push_back(i);
    i = j;
  }
  printf("%d\n", ans.size());
  for (int i = 0; i < int(ans.size()); i++) {
    if (ans[i] < 0)
      printf("-2^");
    else
      printf("+2^");
    if (ans[i] == -(1 << 30))
      printf("0\n");
    else
      printf("%d\n", abs(ans[i]));
  }
  return 0;
}
