#include <bits/stdc++.h>
using namespace std;
const int N = 1005555;
int n;
int v[N];
char s[N];
int St[N];
int Ed[N];
vector<pair<int, int> > vec;
void Rev() {
  int i = 1;
  int j = n;
  while (i < j) {
    swap(s[i], s[j]);
    i++;
    j--;
  }
}
int main() {
  scanf("%s", s + 1);
  n = strlen(s + 1);
  Rev();
  vec.clear();
  for (int i = 1; i <= n; i++) {
    int j = i;
    while (j < n && s[j + 1] == s[i]) j++;
    for (int k = i; k <= j; k++) {
      St[k] = i;
      Ed[k] = j;
    }
    i = j;
  }
  int top = 0;
  for (int i = 1; i <= n; i++) {
    if (top == 0) {
      if (s[i] == '0') continue;
      if (St[i] == Ed[i]) {
        v[i]++;
      } else {
        v[i]--;
        top--;
        i = Ed[i];
      }
    } else {
      if (s[i] == '1') continue;
      if (St[i] == Ed[i]) {
        v[i]--;
      } else {
        v[i]++;
        top++;
        i = Ed[i];
      }
    }
  }
  if (top) v[n + 1]++;
  int cnt = 0;
  for (int i = 1; i <= n + 1; i++)
    if (v[i]) cnt++;
  printf("%d\n", cnt);
  for (int i = 1; i <= n + 1; i++)
    if (v[i] == 1) {
      printf("+2^%d\n", i - 1);
    } else if (v[i] == -1) {
      printf("-2^%d\n", i - 1);
    }
}
