#include <bits/stdc++.h>
using namespace std;
struct Edge {
  int v;
  char c;
} edge[220];
vector<Edge> ans;
vector<int> Chain[10];
int N;
bool flag[110];
void dfs(int x) {
  for (int i = 0; i < Chain[x].size(); i++) {
    int v = edge[Chain[x][i]].v, id = Chain[x][i] >> 1;
    if (!flag[id]) {
      flag[id] = 1;
      dfs(v);
      ans.push_back((Edge){id, edge[Chain[x][i]].c});
    }
  }
}
void print() {
  for (int i = N - 1; i >= 0; i--) printf("%d %c\n", ans[i].v + 1, ans[i].c);
}
int main() {
  scanf("%d", &N);
  for (int i = 0; i < N; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    edge[2 * i] = (Edge){b, '+'};
    Chain[a].push_back(2 * i);
    edge[2 * i + 1] = (Edge){a, '-'};
    Chain[b].push_back(2 * i + 1);
  }
  int u = edge[0].v, sum = 0;
  for (int i = 0; i <= 6; i++)
    if (1 & Chain[i].size()) u = i, sum++;
  if (sum == 0 || sum == 2) {
    dfs(u);
    if (ans.size() == N)
      print();
    else
      printf("No solution");
  } else
    printf("No solution");
  return 0;
}
