#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7, N = 1e6 + 5;
int dp[N][2], change[N][2];
int main() {
  string s, t;
  cin >> s;
  s = "0" + s + "$";
  reverse(s.begin(), s.end());
  t = s;
  int n = s.size() - 1;
  for (int i = 1; i <= n; ++i) t[i] = (t[i] == '0' ? '1' : '0');
  t[1]++;
  for (int i = 0; i <= n; ++i)
    if (t[i] == '2') {
      t[i] = 0;
      t[i + 1] += 1;
    }
  for (int i = 1; i <= n; ++i) {
    if (s[i] == '1')
      dp[i][0] = dp[i - 1][0] + 1;
    else {
      dp[i][0] = dp[i - 1][0];
      if (1 + dp[i - 1][1] < dp[i - 1][0]) {
        dp[i][0] = 1 + dp[i - 1][1];
        change[i][0] = true;
      }
    }
    if (t[i] == '1')
      dp[i][1] = dp[i - 1][1] + 1;
    else {
      dp[i][1] = dp[i - 1][1];
      if (dp[i - 1][0] + 1 < dp[i - 1][1]) {
        dp[i][1] = dp[i - 1][0] + 1;
        change[i][1] = true;
      }
    }
  }
  string sign("+-");
  int type = 0;
  if (dp[n][1] < dp[n][0]) type = 1;
  cout << dp[n][type] << '\n';
  for (int i = n; i >= 1; --i) {
    if (dp[i][type] > dp[i - 1][type ^ change[i][type]])
      cout << sign[type] << "2^" << i - 1 << '\n';
    if (change[i][type]) type ^= 1;
  }
}
