#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline T abs(T a) {
  return ((a < 0) ? -a : a);
}
template <typename T>
inline T sqr(T a) {
  return a * a;
}
const int INF = (int)1E9 + 7;
const long double EPS = 1E-9;
const long double PI = 3.1415926535897932384626433832795;
char s[2000000];
int main() {
  int n = strlen(gets(s));
  vector<pair<int, int> > ans;
  for (int i = 0; i < int(n); ++i) {
    if (s[i] == '0') continue;
    if (s[i] == '1' && (i + 1 >= n || s[i + 1] == '0')) {
      ans.push_back(make_pair(1, i));
      continue;
    }
    int j = i;
    while (j < n) {
      while (j < n && s[i] == s[j]) j++;
      if (j + 1 < n && s[j + 1] == '1') {
        ans.push_back(make_pair(-1, j));
        j++;
      } else
        break;
    }
    ans.push_back(make_pair(1, i - 1)), ans.push_back(make_pair(-1, j - 1));
    i = j - 1;
  }
  cout << int((ans).size()) << endl;
  for (int i = 0; i < int(int((ans).size())); ++i) {
    if (ans[i].first == 1)
      printf("+2^%d\n", n - ans[i].second - 1);
    else
      printf("-2^%d\n", n - ans[i].second - 1);
  }
  return 0;
}
