#include <bits/stdc++.h>
const long long INF = 1e18;
const int MAXN = 1e6 + 17;
using namespace std;
int dp[MAXN][2];
string s;
int par[MAXN][2];
void mainp() {
  cin >> s;
  reverse(s.begin(), s.end());
  for (int i = 0; i < s.size(); i++) s[i] -= '0';
  for (int i = 0; i < MAXN; i++) dp[i][0] = dp[i][1] = MAXN;
  dp[0][0] = 0;
  dp[0][1] = 1;
  for (int i = 0; i < s.size(); i++) {
    for (int j = 0; j < 2; j++) {
      if (dp[i][j] + (s[i] ^ j) < dp[i + 1][j]) {
        dp[i + 1][j] = dp[i][j] + (s[i] ^ j);
        par[i + 1][j] = j;
      }
      if (dp[i][j ^ 1] + (s[i] ^ j ^ 1) + 1 < dp[i + 1][j]) {
        dp[i + 1][j] = dp[i][j ^ 1] + (s[i] ^ j ^ 1) + 1;
        par[i + 1][j] = j ^ 1;
      }
    }
  }
  int rev = 0;
  int sign = 1;
  cout << dp[s.size()][0] << endl;
  for (int i = s.size(); i > 0; i--) {
    if (par[i][rev] == rev) {
      if (s[i - 1] ^ rev) {
        if (sign == 1)
          cout << '+';
        else
          cout << '-';
        cout << "2^";
        cout << i - 1 << endl;
      }
    } else {
      if (sign == 1)
        cout << '+';
      else
        cout << '-';
      cout << "2^";
      cout << i << endl;
      sign = -sign;
      if (s[i - 1] ^ rev ^ 1) {
        if (sign == 1)
          printf("+");
        else
          printf("-");
        printf("2^");
        printf("%d", i - 1);
        printf("\n");
      }
    }
    rev = par[i][rev];
  }
  if (rev == 1) {
    if (sign == 1)
      printf("+");
    else
      printf("-");
    printf("2^");
    printf("%d", 0);
    printf("\n");
  }
}
int main() {
  mainp();
  return 0;
}
