#include <bits/stdc++.h>
using namespace std;
const int max_n = 7;
int Deg[max_n] = {0};
int n;
struct Edge {
  int num, dir, to;
};
vector<Edge> G[max_n];
int visit[105] = {0};
vector<pair<int, int> > ans;
void dfs(int v) {
  for (auto u : G[v]) {
    if (!visit[u.num]) {
      visit[u.num] = 1;
      dfs(u.to);
      ans.push_back({u.num, u.dir});
    }
  }
}
int main() {
  cin >> n;
  memset(visit, 0, sizeof(visit));
  for (int i = 1; i <= n; i++) {
    int u, v;
    cin >> u >> v;
    G[u].push_back({i, 1, v});
    G[v].push_back({i, -1, u});
    Deg[u]++;
    Deg[v]++;
  }
  int cnt = 0, st = -1;
  for (int i = 0; i < max_n; i++) {
    if (Deg[i] & 1) {
      cnt++;
      st = i;
    }
  }
  if (cnt != 0 && cnt != 2) {
    cout << "No solution";
  } else {
    if (st != -1)
      dfs(st);
    else {
      for (int i = 0; i < max_n; i++) {
        if (Deg[i]) {
          dfs(i);
          break;
        }
      }
    }
    if (ans.size() != n)
      cout << "No solution";
    else {
      reverse(ans.begin(), ans.end());
      for (auto p : ans) {
        cout << p.first << " ";
        if (p.second > 0)
          cout << "+ ";
        else
          cout << "- ";
        cout << endl;
      }
    }
  }
  return 0;
}
