#include #include #include #include #include using namespace std; typedef pair ii; typedef vector vi; typedef vector vvi; typedef set Set; int v,e; Set s; vvi E; char target[1010]; char cur[1010]; int prev[1010]; void flip(int a, int b) { if(a>b) swap(a,b); Set::iterator i = s.find(ii(a,b)); if(i!=s.end()) s.erase(i); else s.insert(ii(a,b)); } bool doit(int start) { fill(prev, prev+v, -1); prev[start] = start; int finish; queue q; q.push(start); while(! q.empty()) { int c = q.front(); q.pop(); for(vi::iterator i=E[c].begin(); i!=E[c].end(); ++i) { if(prev[*i] != -1) continue; prev[*i] = c; q.push(*i); if(target[*i]=='o' && cur[*i]!='o') { finish = *i; goto found; } } } return false; found: cur[finish] = 'o'; while(finish != start) { flip(finish, prev[finish]); finish = prev[finish]; } cur[finish] = 'o'; return true; } int main() { while(cin>>v>>e, v||e) { E.clear(); s.clear(); strcpy(cur, string(v, 'e').c_str()); E.insert(E.end(), v, vi()); for(int i=0; i> a >> b; --a; --b; E[a].push_back(b); E[b].push_back(a); } cin >> target; bool done = false; while(not done) { int i; for(i=0; ifirst+1) << " " << (i->second+1) << endl; } else cout << "impossible\n"; } return 0; }