101
#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
 
using namespace std;
 
typedef vector<int> vi; 
typedef vector<string> vs;
typedef vector<vi> vvi; 
typedef pair<int,int> ii; 
#define sz(a) int((a).size()) 
#define pb push_back 
#define all(c) (c).begin(),(c).end() 
//#define tr(c,i) for(typeof((c).begin() i = (c).begin(); i != (c).end(); i++) 
#define present(c,x) ((c).find(x) != (c).end()) 
#define cpresent(c,x) (find(all(c),x) != (c).end()) 
#define FOR(_i,_n) for(int (_i) = 0; (_i) < (_n); (_i)++)
 
#define INPUT_FILE "xo.in"
#define OUTPUT_FILE "xo.out"
 
int m[10][10] = {0};
int S[1000];
int sp = 0;
 
void s(int v)
{
    FOR(i,10)
    {
        if(m[v][i] > 0)
        {
            m[v][i]--;
            m[i][v]--;
            s(i);
        }
    }
    S[sp] = v;
    sp++;
}
 
int main()
{
#ifdef ALEX
    freopen("input.in", "r", stdin);
    freopen("output.out", "w", stdout);
#else
//    freopen(INPUT_FILE, "r", stdin);
//    freopen(OUTPUT_FILE, "w", stdout);
#endif
 
    int n;
    vector< pair< pair<int,int> , int > > d;
 
    cin >> n;
 
    FOR(i,n)
    {
        int a,b;
        cin >> a >> b;
        m[a][b] ++;
        m[b][a] ++;
        d.push_back(make_pair( make_pair(a,b), 0) );
    }
    int cc = 0;
    int v = -1;
    int vv;
    FOR(i,10)
    {
        int c = 0;
        FOR(j,10)
        {
            c += m[i][j];
        }
        if(c%2 == 1)
        {
            cc++;
            v = i;
        }
        else if (c > 0)
        {
            vv = i;
        }
    }
    if((cc != 0) && (cc != 2))
    {
        cout << "No solution";
        return 0;
    }
 
    if(v == -1)
        v = vv;
 
    s(v);
 
    if((sp) != (n+1))
    {
        cout << "No solution";
        return 0;
    }
 
    FOR(i,sp-1)
    {
        int a,b;
        a = S[i];
        b = S[i+1];
        FOR(j,n)
        {
            if((d[j].first.first == a) && (d[j].first.second == b) && (d[j].second == 0))
            {
                cout << j+1 << " +" << endl;
                d[j].second = 1;
                break;
            } 
            else if((d[j].first.first == b) && (d[j].first.second == a) && (d[j].second == 0))
            {
                cout << j+1 << " -" << endl;
                d[j].second = 1;
                break;
            }
        }
    }
 
    return 0;
}
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-Share Alike 2.5 License.