#include <bits/stdc++.h>
using namespace std;
struct node {
  int tail;
  int idx;
};
node f(int tail, int idx) {
  node temp;
  temp.tail = tail;
  temp.idx = idx;
  return temp;
}
vector<node> g[10];
int deg[10] = {0};
int v[105] = {0};
stack<int> s;
int all = 0;
void dfs(int root) {
  for (int i = 0; i < g[root].size(); i++) {
    node temp = g[root][i];
    if (!v[abs(temp.idx)]) {
      v[abs(temp.idx)] = 1;
      dfs(temp.tail);
      s.push(temp.idx);
      all++;
    }
  }
}
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    g[a].push_back(f(b, i));
    g[b].push_back(f(a, -i));
    deg[a]++;
    deg[b]++;
  }
  int from = -1;
  int to = -1;
  int sign = 0;
  for (int i = 0; i <= 6; i++) {
    if (deg[i] % 2) {
      if (from == -1)
        from = i;
      else if (to == -1)
        to = i;
      else {
        sign = 1;
        break;
      }
    }
  }
  if (to == -1 && from != -1) sign = 1;
  if (sign == 1)
    printf("No solution\n");
  else {
    if (from == -1) {
      for (int i = 0; i <= 6; i++) {
        if (deg[i] != 0) {
          from = i;
          break;
        }
      }
    }
    dfs(from);
    if (all != n) {
      printf("No solution\n");
      return 0;
    }
    while (!s.empty()) {
      int now = s.top();
      s.pop();
      if (now < 0)
        printf("%d -\n", -now);
      else
        printf("%d +\n", now);
    }
  }
}
