#include <bits/stdc++.h>
using namespace std;
const int INF = INT_MAX;
const long long INFL = LLONG_MAX;
const long double pi = acos(-1);
int N;
string s;
int P[1001001][2];
int DP[1001001][2];
bitset<2> was[1001001];
int dp(int n, int flipped) {
  int& x = DP[n][flipped];
  if (was[n][flipped]) return x;
  was[n][flipped] = 1;
  x = INF;
  int actualDigit = s[n] - '0';
  if (flipped) actualDigit ^= 1;
  if (n == 1) {
    if (actualDigit == 1) {
      P[n][flipped] = 1;
      x = 1;
    } else {
      P[n][flipped] = 0;
      x = 0;
    }
  } else {
    if (actualDigit == 1) {
      int rec = dp(n - 1, 0);
      if (x > rec + 1) {
        x = rec + 1;
        P[n][flipped] = 1;
      }
      rec = dp(n - 1, 1);
      if (x > rec + 1) {
        x = rec + 1;
        P[n][flipped] = -1;
      }
    } else {
      x = dp(n - 1, flipped);
      P[n][flipped] = 0;
    }
  }
  return x;
}
int main() {
  ios_base::sync_with_stdio(0);
  cout.precision(15);
  cout << fixed;
  cout.tie(0);
  cin.tie(0);
  cin >> s;
  s = "0" + s;
  N = int(s.size());
  s = " " + s;
  int mn = dp(N, 0);
  cout << mn << '\n';
  int n = N;
  int flipped = 0;
  while (n > 0) {
    int p = P[n][flipped];
    if (p == 0) {
    }
    if (p == -1) {
      cout << "-2^" << (N - n) << '\n';
      flipped = 1;
    }
    if (p == 1) {
      cout << "+2^" << (N - n) << '\n';
      flipped = 0;
    }
    n--;
  }
}
