#include <bits/stdc++.h>
using namespace std;
const int INF = 1012345678;
const double PI = acos(-1.0);
const double EPS = 0.0000000304;
const int MAX = 1231231;
int dp[MAX];
int tp[MAX];
char ip[MAX];
int op[MAX];
int L;
vector<pair<int, int> > ans;
int main() {
  gets(ip);
  L = strlen(ip);
  for (int(i) = 0; (i) < (L); (i)++) {
    op[i] = ip[L - i - 1] - '0';
  }
  int bs = 0, bt = -1;
  for (int(i) = 0; (i) < (L); (i)++) {
    tp[i] = -1;
    dp[i] = dp[i - 1] + op[i];
    bs += (1 - op[i]);
    if (dp[i] > bs + 2) {
      dp[i] = bs + 2;
      tp[i] = bt + 1;
    }
    if (bs > dp[i]) {
      bs = dp[i];
      bt = i;
    }
  }
  printf("%d\n", dp[L - 1]);
  int id = L - 1;
  while (id >= 0) {
    if (tp[id] == -1) {
      if (op[id]) {
        ans.push_back((make_pair((id), (1))));
      }
      id--;
    } else {
      int rr = tp[id], nn = id;
      ans.push_back((make_pair((id + 1), (1))));
      ans.push_back((make_pair((rr), (-1))));
      while (nn >= rr) {
        if (!op[nn]) {
          ans.push_back((make_pair((nn), (-1))));
        }
        nn--;
      }
      id = nn - 1;
    }
  }
  for (int(i) = 0; (i) < (ans.size()); (i)++) {
    if (ans[i].second > 0) {
      printf("+2^%d\n", ans[i].first);
    } else {
      printf("-2^%d\n", ans[i].first);
    }
  }
}
