#include <bits/stdc++.h>
using namespace std;
const long long MAXN = 1e5 + 10;
const long long MOD = 1e9 + 7;
vector<pair<long long, long long> > adj[MAXN];
vector<pair<long long, char> > vec;
pair<long long, long long> dom[MAXN];
long long mark[MAXN];
void dfs(long long v) {
  for (auto x : adj[v]) {
    long long u = x.first, num = x.second;
    if (!mark[num]) {
      mark[num] = 1;
      dfs(u);
      if (dom[num].first == v) {
        vec.push_back(make_pair(num, '+'));
      } else {
        vec.push_back(make_pair(num, '-'));
      }
    }
  }
  return;
}
int main() {
  long long n, m = 0;
  cin >> n;
  for (int i = 1; i <= n; i++) {
    long long v, u;
    cin >> v >> u;
    dom[i] = make_pair(v, u);
    adj[v].push_back(make_pair(u, i));
    adj[u].push_back(make_pair(v, i));
    m = max(m, max(u, v));
  }
  long long f = 0, p = 0, o = 0;
  for (int i = 0; i <= m; i++) {
    if (adj[i].size() % 2) {
      f++;
      p = i;
    }
    if (adj[i].size()) {
      o = i;
    }
  }
  if (f > 2) {
    cout << "No solution";
    return 0;
  }
  if (f == 2) {
    dfs(p);
  } else {
    dfs(o);
  }
  for (int i = 1; i <= n; i++) {
    if (!mark[i]) {
      cout << "No solution";
      return 0;
    }
  }
  while (vec.size()) {
    cout << vec.back().first << " " << vec.back().second << '\n';
    vec.pop_back();
  }
}
