#include <bits/stdc++.h>
using namespace std;
const int N = 1e2 + 8;
int n, a[N], b[N], prt[N], t, x, ii, ij;
bool mrk[N], mark[N], bl;
vector<pair<int, int> > nei[N];
vector<pair<int, pair<int, int> > > vec;
void dfs(int v, int par = 0, int ind = -1) {
  mrk[v] = 1;
  while (prt[v] < nei[v].size()) {
    auto p = nei[v][prt[v]];
    prt[v]++;
    if (!mark[p.second]) {
      t++;
      mark[p.second] = 1;
      dfs(p.first, v, p.second);
    }
  }
  vec.push_back({ind, {par, v}});
}
void dfs_all() {
  for (int i = 0; i < 7; i++) {
    if (nei[i].size() % 2) {
      x++;
      bl = 1;
      ii = i;
    }
    if (nei[i].size()) ij = i;
  }
  if (bl)
    dfs(ii);
  else
    dfs(ij);
}
int main() {
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> a[i] >> b[i];
    nei[a[i]].push_back({b[i], i});
    nei[b[i]].push_back({a[i], i});
  }
  dfs_all();
  reverse(vec.begin(), vec.end());
  if (t != n || (x != 2 && x != 0)) return cout << "No solution", 0;
  for (auto r : vec) {
    if (r.first == -1) continue;
    cout << r.first + 1 << " ";
    if (a[r.first] == r.second.first)
      cout << "+" << endl;
    else
      cout << "-" << endl;
  }
}
