#include <bits/stdc++.h>
using namespace std;
int const N = 2e6 + 20;
int dp1[N], dp2[N], len;
string s;
vector<int> ans;
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cin >> s;
  len = s.size();
  dp1[len - 1] = (s[len - 1] == '1'), dp2[len - 1] = 1;
  for (int i = len - 2; ~i; i--) {
    if (s[i] == '1') {
      dp2[i] = dp2[i + 1];
      dp1[i] = min(dp1[i + 1], dp2[i + 1]) + 1;
    } else {
      dp1[i] = dp1[i + 1];
      dp2[i] = min(dp1[i + 1], dp2[i + 1]) + 1;
    }
  }
  cout << dp1[0] << '\n';
  int n = len;
  bool t = 0;
  for (int i = 0; i < n; i++) {
    if (!t) {
      if (dp1[i] == dp1[i + 1] + 1) {
        ans.push_back(n - i);
      } else if (dp1[i] == dp2[i + 1] + 1) {
        ans.push_back(n - i + (s[i] == '1'));
        t = 1;
      }
    } else {
      if (dp2[i] == dp2[i + 1] + 1) {
        ans.push_back(-(n - i));
      } else if (dp2[i] == dp1[i + 1] + 1) {
        ans.push_back(-(n - i + (s[i] == '0')));
        t = 0;
      }
    }
  }
  for (int i = 0; i < ans.size(); i++) {
    cout << (ans[i] > 0 ? '+' : '-');
    cout << "2^" << abs(ans[i]) - 1 << '\n';
  }
  return 0;
}
