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; }
page revision: 0, last edited: 27 Apr 2007 14:27