#include <bits/stdc++.h>
using namespace std;
const int maxn = 1 * 100 + 5;
int n, p[maxn];
pair<int, int> e[maxn];
vector<pair<int, int> > adj[maxn];
vector<int> ans;
int m[10], md[10], mark[maxn], o, so = -1, w[maxn];
vector<int> c[maxn][maxn];
void tour(int root) {
  for (; p[root] < adj[root].size();) {
    auto u = adj[root][p[root]];
    if (mark[u.second] == 0) {
      mark[u.second] = 1;
      tour(u.first);
    } else
      p[root]++;
  }
  ans.push_back(root);
}
void dfs(int root) {
  md[root] = 1;
  for (auto u : adj[root]) {
    if (md[u.first] == 0) {
      dfs(u.first);
    }
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  ;
  cin >> n;
  for (int i = 1; i <= n; i++) {
    int u, v;
    cin >> u >> v;
    e[i] = {u, v};
    adj[u].push_back({v, i});
    adj[v].push_back({u, i});
    m[u] = 1;
    m[v] = 1;
    c[u][v].push_back(i);
    c[v][u].push_back(i);
  }
  dfs(e[1].first);
  for (int i = 0; i < 7; i++) {
    if ((int)adj[i].size() % 2 != 0) o++;
    if (m[i] == 1 && md[i] != 1) {
      cout << "No solution";
      return 0;
    }
  }
  if (o != 0 && o != 2) {
    cout << "No solution";
    return 0;
  }
  for (int i = 0; i < 7; i++) {
    if ((int)adj[i].size() % 2 == 1) so = i;
  }
  if (so != -1) {
    tour(so);
  } else {
    tour(e[1].first);
  }
  for (int i = 0; i < ans.size() - 1; i++) {
    int k = c[ans[i]][ans[i + 1]][c[ans[i]][ans[i + 1]].size() - 1];
    if (e[k].first == ans[i]) {
      cout << k << " +";
    } else {
      cout << k << " -";
    }
    cout << endl;
    c[ans[i]][ans[i + 1]].pop_back();
    c[ans[i + 1]][ans[i]].pop_back();
  }
}
