#include <bits/stdc++.h>
using namespace std;
struct State {
  State(int a, int b, int c, int d) { x[0] = a, x[1] = b, x[2] = c, x[3] = d; }
  int x[4];
  int &operator[](int i) { return x[i & 3]; }
  const int &operator[](int i) const { return x[i & 3]; }
};
bool operator<(const State &s, const State &t) {
  for (int i = 0; i < int(4); ++i)
    if (s[i] != t[i]) return s[i] < t[i];
  return false;
}
bool operator==(const State &s, const State &t) {
  for (int i = 0; i < int(4); ++i)
    if (s[i] != t[i]) return false;
  return true;
}
bool operator!=(const State &s, const State &t) { return !(s == t); }
struct Move {
  enum Op { NONE, ADD, DIV };
  Move(int i = 0, Move::Op o = NONE) : index(i % 4), op(o){};
  int index;
  Op op;
};
State undo(const State &s, const Move &m) {
  State t = s;
  if (m.op == Move::ADD && t[m.index] > 1 && t[m.index + 1] > 1) {
    --t[m.index];
    --t[m.index + 1];
  } else if (m.op == Move::DIV) {
    t[m.index] *= 2;
    t[m.index + 1] *= 2;
  }
  return t;
}
State dom(const State &s, const Move &m) {
  State t = s;
  if (m.op == Move::ADD) {
    ++t[m.index];
    ++t[m.index + 1];
  } else if (m.op == Move::DIV) {
    assert(t[m.index] % 2 == 0 && t[m.index + 1] % 2 == 0);
    t[m.index] /= 2;
    t[m.index + 1] /= 2;
  }
  return t;
}
ostream &operator<<(ostream &os, const Move m) {
  if (m.op == Move::ADD) os << '+';
  if (m.op == Move::DIV) os << '/';
  return os << m.index + 1;
}
static const Move moves[8] = {Move(0, Move::ADD), Move(1, Move::ADD),
                              Move(2, Move::ADD), Move(3, Move::ADD),
                              Move(0, Move::DIV), Move(1, Move::DIV),
                              Move(2, Move::DIV), Move(3, Move::DIV)};
int main() {
  State initial(1, 1, 1, 1);
  map<State, Move> solved;
  {
    queue<State> queue;
    solved[initial] = Move();
    queue.push(initial);
    for (int i = 0; i < int(10000); ++i) {
      State s = queue.front();
      queue.pop();
      for (int m = 0; m < int(8); ++m) {
        State t = undo(s, moves[m]);
        if (solved.find(t) == solved.end()) {
          solved[t] = moves[m];
          queue.push(t);
        }
      }
    }
  }
  int a, b, c, d;
  cin >> a >> b >> c >> d;
  State s(a, b, c, d);
  while (solved.find(s) == solved.end()) {
    int i = 0;
    for (int j = 1; j < int(4); ++j)
      if (s[j] > s[i]) i = j;
    if (s[i] % 2 == 1) {
      Move m(i, Move::ADD);
      s = dom(s, m);
      cout << m << '\n';
    }
    if (s[i + 1] % 2 == 1) {
      Move m(i + 1, Move::ADD);
      s = dom(s, m);
      cout << m << '\n';
    }
    Move m(i, Move::DIV);
    s = dom(s, m);
    cout << m << '\n';
  }
  while (s != initial) {
    Move m = solved[s];
    cout << m << '\n';
    s = dom(s, m);
  }
}
