#include <bits/stdc++.h>
using namespace std;
const int mxn = 105;
int n, a, b, p[10], mark[mxn], l, s;
vector<pair<int, int> > adj[mxn], ed;
vector<int> edge[mxn][mxn], ans;
void tour(int v) {
  while (p[v] < adj[v].size()) {
    if (!mark[adj[v][p[v]].second]) {
      mark[adj[v][p[v]].second] = 1;
      tour(adj[v][p[v]++].first);
    } else
      p[v]++;
  }
  ans.push_back(v);
}
int main() {
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> a >> b;
    s = a;
    adj[a].push_back({b, i});
    adj[b].push_back({a, i});
    ed.push_back({a, b});
    if (a > b) swap(a, b);
    edge[a][b].push_back(i);
  }
  a = -1;
  b = -1;
  for (int i = 0; i <= 6; i++) {
    if (adj[i].size() % 2)
      if (a == -1)
        a = i;
      else if (b == -1)
        b = i;
      else {
        cout << "No solution";
        return 0;
      }
  }
  if (!(a == -1) && !(b == -1))
    tour(a);
  else if ((a == -1) && b == -1)
    tour(s);
  else {
    cout << "No solution";
    return 0;
  }
  for (int i = 0; i <= n; i++) {
    if (p[i] < adj[i].size()) {
      cout << "No solution";
      return 0;
    }
  }
  for (int i = 1; i < ans.size(); i++) {
    a = ans[i - 1];
    b = ans[i];
    bool y = 0;
    if (a > b) {
      swap(a, b);
      y = 1;
    }
    cout << edge[a][b].back() + 1 << " ";
    if (ed[edge[a][b].back()].first == a ^ y)
      cout << '+';
    else
      cout << '-';
    cout << endl;
    edge[a][b].pop_back();
  }
  return 0;
}
