#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
using namespace std;
const long double eps = 1e-7;
const int inf = 1000000010;
const long long INF = 10000000000000010LL;
const int mod = 1000000007;
const int MAXN = 110, LOG = 20;
int n, m, k, u, v, x, y, t, a, b, ans, root;
int deg[7];
vector<pair<int, int> > G[7];
bitset<MAXN> mark;
int A[MAXN][2];
vector<pair<int, int> > out;
void tour(int node) {
  while (!G[node].empty()) {
    pair<int, int> p = G[node].back();
    G[node].pop_back();
    int v = p.first, i = p.second;
    if (mark[i]) continue;
    mark[i] = 1;
    tour(v);
    out.push_back({i, A[i][0] == node});
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> A[i][0] >> A[i][1];
    G[A[i][0]].push_back({A[i][1], i});
    G[A[i][1]].push_back({A[i][0], i});
    root = A[i][0];
  }
  for (int i = 0; i < 7; i++)
    if (G[i].size() & 1) {
      if (t++ == 2) return cout << "No solution" << '\n', 0;
      root = i;
    }
  tour(root);
  if (out.size() < n) return cout << "No solution" << '\n', 0;
  for (pair<int, int> p : out) {
    cout << p.first << ' ';
    if (p.second)
      cout << "-\n";
    else
      cout << "+\n";
  }
  return 0;
}
