#include <bits/stdc++.h>
using namespace std;
map<vector<int>, pair<vector<int>, pair<int, int> > > par;
int calc(vector<int> x) {
  int ret = 0;
  for (int i = 0; i < 4; i++) {
    ret += x[i] - 1;
  }
  return ret;
}
int main() {
  vector<int> s, finish;
  for (int i = 0; i < 4; i++) {
    int a;
    cin >> a;
    s.push_back(a);
    finish.push_back(1);
  }
  priority_queue<
      pair<pair<int, int>,
           pair<pair<vector<int>, vector<int> >, pair<int, int> > >,
      vector<pair<pair<int, int>,
                  pair<pair<vector<int>, vector<int> >, pair<int, int> > > >,
      greater<pair<pair<int, int>,
                   pair<pair<vector<int>, vector<int> >, pair<int, int> > > > >
      q;
  q.push(pair<pair<int, int>,
              pair<pair<vector<int>, vector<int> >, pair<int, int> > >(
      pair<int, int>(calc(s), 0),
      pair<pair<vector<int>, vector<int> >, pair<int, int> >(
          pair<vector<int>, vector<int> >(s, s), pair<int, int>(0, 0))));
  while (!q.empty()) {
    pair<pair<int, int>,
         pair<pair<vector<int>, vector<int> >, pair<int, int> > >
        tmp = q.top();
    q.pop();
    int heur = tmp.first.first;
    int cost = tmp.first.second;
    pair<pair<vector<int>, vector<int> >, pair<int, int> > fr = tmp.second;
    vector<int> now = fr.first.first;
    vector<int> from = fr.first.second;
    int idx = fr.second.first;
    int task = fr.second.second;
    if (par.count(now)) continue;
    par[now] =
        pair<vector<int>, pair<int, int> >(from, pair<int, int>(idx, task));
    if (heur == cost) break;
    vector<int> nx = now;
    cost++;
    int mx = 0, id;
    for (int i = 0; i < 4; i++) {
      if (now[i] > mx) {
        mx = now[i];
        id = i;
      }
    }
    int adjki = (id + 3) % 4;
    int adjka = (id + 1) % 4;
    task = 1;
    if (mx % 2 == 0) {
      if (now[adjki] % 2 == 0) {
        nx[id] /= 2;
        nx[adjki] /= 2;
        task = 2;
        q.push(pair<pair<int, int>,
                    pair<pair<vector<int>, vector<int> >, pair<int, int> > >(
            pair<int, int>(calc(nx) + cost, cost),
            pair<pair<vector<int>, vector<int> >, pair<int, int> >(
                pair<vector<int>, vector<int> >(nx, now),
                pair<int, int>(adjki, task))));
        nx[id] *= 2;
        nx[adjki] *= 2;
      } else if (now[adjka] % 2 == 0) {
        nx[id] /= 2;
        nx[adjka] /= 2;
        task = 2;
        q.push(pair<pair<int, int>,
                    pair<pair<vector<int>, vector<int> >, pair<int, int> > >(
            pair<int, int>(calc(nx) + cost, cost),
            pair<pair<vector<int>, vector<int> >, pair<int, int> >(
                pair<vector<int>, vector<int> >(nx, now),
                pair<int, int>(id, task))));
        nx[id] *= 2;
        nx[adjka] *= 2;
      } else {
        nx[id]++;
        nx[adjki]++;
        task = 1;
        q.push(pair<pair<int, int>,
                    pair<pair<vector<int>, vector<int> >, pair<int, int> > >(
            pair<int, int>(calc(nx) + cost, cost),
            pair<pair<vector<int>, vector<int> >, pair<int, int> >(
                pair<vector<int>, vector<int> >(nx, now),
                pair<int, int>(adjki, task))));
        nx[id]--;
        nx[adjki]--;
      }
    } else {
      if (now[adjki] % 2 == 1) {
        nx[id]++;
        nx[adjki]++;
        task = 1;
        q.push(pair<pair<int, int>,
                    pair<pair<vector<int>, vector<int> >, pair<int, int> > >(
            pair<int, int>(calc(nx) + cost, cost),
            pair<pair<vector<int>, vector<int> >, pair<int, int> >(
                pair<vector<int>, vector<int> >(nx, now),
                pair<int, int>(adjki, task))));
        nx[id]--;
        nx[adjki]--;
      } else if (now[adjka] % 2 == 1) {
        nx[id]++;
        nx[adjka]++;
        task = 1;
        q.push(pair<pair<int, int>,
                    pair<pair<vector<int>, vector<int> >, pair<int, int> > >(
            pair<int, int>(calc(nx) + cost, cost),
            pair<pair<vector<int>, vector<int> >, pair<int, int> >(
                pair<vector<int>, vector<int> >(nx, now),
                pair<int, int>(id, task))));
        nx[id]--;
        nx[adjka]--;
      } else {
        nx[id]++;
        nx[adjki]++;
        task = 1;
        q.push(pair<pair<int, int>,
                    pair<pair<vector<int>, vector<int> >, pair<int, int> > >(
            pair<int, int>(calc(nx) + cost, cost),
            pair<pair<vector<int>, vector<int> >, pair<int, int> >(
                pair<vector<int>, vector<int> >(nx, now),
                pair<int, int>(adjki, task))));
        nx[id]--;
        nx[adjki]--;
      }
    }
  }
  vector<pair<int, int> > ans;
  while (true) {
    pair<vector<int>, pair<int, int> > tmp = par[finish];
    vector<int> bef = tmp.first;
    if (finish == bef) break;
    int idx = tmp.second.first;
    int task = tmp.second.second;
    ans.push_back(pair<int, int>(idx, task));
    finish = bef;
  }
  for (int i = (int)ans.size() - 1; i >= 0; i--) {
    if (ans[i].second == 1) {
      cout << "+";
    } else
      cout << "/";
    cout << ans[i].first + 1 << endl;
  }
}
