#include <bits/stdc++.h>
using namespace std;
const int MAXN = 10;
vector<int> adj[MAXN][MAXN];
bool mark[MAXN];
int deg[MAXN], dom[150], n, v, k, s;
void dfs(int source, int edge) {
  mark[source] = true;
  for (int i = 0; i < 7; i++)
    if (adj[source][i].size() > 0) {
      int t = *adj[source][i].begin();
      adj[source][i].erase(adj[source][i].begin());
      adj[i][source].erase(adj[i][source].begin());
      deg[i]--, deg[source]--;
      dfs(i, t);
    }
  if (edge != 500) dom[s++] = edge;
}
int main() {
  cin >> n;
  for (int i = 1; i <= n; i++) {
    int x, y;
    cin >> x >> y;
    adj[x][y].push_back(i);
    adj[y][x].push_back(-i);
    deg[x]++, deg[y]++;
    v = x;
  }
  int mn = 100;
  for (int i = 0; i < 7; i++)
    if (deg[i] % 2) k++, v = i;
  if (k != 0 && k != 2)
    cout << "No solution";
  else {
    dfs(v, 500);
    for (int i = 0; i < 7; i++)
      if (deg[i] && !mark[i]) {
        cout << "No solution";
        return 0;
      }
    for (int i = 0; i < s; i++)
      cout << abs(dom[i]) << " " << (dom[i] < 0 ? "+" : "-") << endl;
  }
  return 0;
}
