#include <bits/stdc++.h>
using namespace std;
const int N = 10;
const int M = 100 + 10;
int m, pt[N], mark[M], rev[M];
vector<pair<int, int> > edge, adj[N];
vector<int> odd, tour;
void DFS(int v) {
  while (pt[v] < adj[v].size()) {
    int u = adj[v][pt[v]].first;
    int e = adj[v][pt[v]].second;
    if (!mark[e]) {
      mark[e] = 1;
      DFS(u);
      tour.push_back(e);
      if (edge[e].first != v) rev[e] = 1;
    }
    pt[v]++;
  }
}
int main() {
  cin >> m;
  for (int i = 0; i < m; i++) {
    int u, v;
    cin >> u >> v;
    edge.push_back(make_pair(u, v));
    adj[u].push_back(make_pair(v, edge.size() - 1));
    adj[v].push_back(make_pair(u, edge.size() - 1));
  }
  for (int i = 0; i < 7; i++)
    if ((int)adj[i].size() % 2) odd.push_back(i);
  if ((int)odd.size() > 2) {
    cout << "No solution" << endl;
    return 0;
  } else if ((int)odd.size()) {
    edge.push_back(make_pair(odd[0], odd[1]));
    adj[odd[0]].push_back(make_pair(odd[1], edge.size() - 1));
    adj[odd[1]].push_back(make_pair(odd[0], edge.size() - 1));
  }
  for (int i = 0; i < 7; i++) {
    if ((int)adj[i].size()) {
      DFS(i);
      break;
    }
  }
  if (tour.size() < edge.size()) {
    cout << "No solution" << endl;
    return 0;
  }
  int start = tour.size();
  if ((int)edge.size() > m) {
    for (int i = 0; i < tour.size(); i++)
      if (tour[i] == m) {
        start = i;
        break;
      }
  }
  for (int i = start - 1; i >= 0; i--)
    cout << tour[i] + 1 << " " << (rev[tour[i]] ? '-' : '+') << endl;
  for (int i = tour.size() - 1; i > start; i--)
    cout << tour[i] + 1 << " " << (rev[tour[i]] ? '-' : '+') << endl;
}
