#include <bits/stdc++.h>
using namespace std;
const int N = 110;
const int INFINITE = 0x3F3F3F3F;
int a[N], b[N], g[N][N], d[N];
bool v[N];
int path[N];
int cnt = 0;
int n;
void dfs(int u) {
  for (int i = 0; i <= 6; i++) {
    if (g[u][i]) {
      g[u][i]--;
      g[i][u]--;
      dfs(i);
    }
  }
  path[++cnt] = u;
  if (cnt == n + 1) {
    for (int i = 1; i <= n; i++) {
      int x = path[i], y = path[i + 1];
      for (int j = 1; j <= n; j++) {
        if (v[j]) continue;
        if ((a[j] == x && b[j] == y) || (b[j] == x && a[j] == y)) {
          if (a[j] == x) {
            printf("%d +\n", j);
          } else
            printf("%d -\n", j);
          v[j] = true;
          break;
        }
      }
    }
    exit(0);
  }
}
int main() {
  memset(g, 0, sizeof(g));
  memset(d, 0, sizeof(d));
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    v[i] = false;
    scanf("%d%d", &a[i], &b[i]);
    g[a[i]][b[i]]++;
    g[b[i]][a[i]]++;
    d[a[i]]++;
    d[b[i]]++;
  }
  int odd = 0, st = a[1];
  for (int i = 0; i <= 6; i++) {
    if (d[i] & 1) {
      odd++;
      st = i;
    }
  }
  if (odd > 2 || odd == 1) {
    printf("No solution\n");
    return 0;
  }
  dfs(st);
  printf("No solution\n");
  return 0;
}
