#include <bits/stdc++.h>
using namespace std;
char str[1000001];
int n;
int main() {
  scanf("%s", &str);
  n = strlen(str);
  int count = 0;
  for (int i = 0; str[i]; ++i) {
    if (str[i] == '0') continue;
    int start = i;
    int end = i;
    int cnt0 = 0;
    int cnt1 = 1;
    int j;
    for (j = i + 1; str[j]; ++j) {
      if (str[j] == '0') {
        if (str[j - 1] == '0') {
          end = j - 1;
          break;
        } else {
          ++cnt0;
        }
      } else {
        ++cnt1;
      }
    }
    if (!str[j]) {
      end = j - 1;
    }
    i = j;
    if (cnt1 >= cnt0 + 2) {
      ++count;
      for (int k = start; k < end; ++k) {
        if (str[k] == '0') {
          ++count;
        }
      }
      ++count;
    } else {
      for (int k = start; k <= end; ++k) {
        if (str[k] == '1') {
          ++count;
        }
      }
    }
  }
  printf("%d\n", count);
  for (int i = 0; str[i]; ++i) {
    if (str[i] == '0') continue;
    int start = i;
    int end = i;
    int cnt0 = 0;
    int cnt1 = 1;
    int j;
    for (j = i + 1; str[j]; ++j) {
      if (str[j] == '0') {
        if (str[j - 1] == '0') {
          end = j - 1;
          break;
        } else {
          ++cnt0;
        }
      } else {
        ++cnt1;
      }
    }
    if (!str[j]) {
      end = j - 1;
    }
    i = j;
    if (cnt1 >= cnt0 + 2) {
      printf("+2^%d\n", n - start);
      for (int k = start; k < end; ++k) {
        if (str[k] == '0') {
          printf("-2^%d\n", n - k - 1);
        }
      }
      if (str[end] == '0')
        printf("-2^%d\n", n - end);
      else
        printf("-2^%d\n", n - end - 1);
    } else {
      for (int k = start; k <= end; ++k) {
        if (str[k] == '1') {
          printf("+2^%d\n", n - k - 1);
        }
      }
    }
  }
  return 0;
}
