#include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef long double ld; typedef pair PII; #define pb push_back #define fi first #define se second #define REP(i, n) for(int i = 0; i < (int)(n); ++i) #define FOR(i, a, b) for(int i = (int)(a); i <= (int)(b); ++i) #define MAXN 10007 int N; bool G[MAXN][MAXN]; bool U[MAXN][MAXN]; bool R[MAXN]; bool V[MAXN]; bool par; void DFS(int x){ V[x] = true; if(R[x]) par = !par; REP(i, N) if(G[x][i] && !V[i]){ if(par) U[x][i] = U[i][x] = !U[x][i]; DFS(i); if(par) U[x][i] = U[i][x] = !U[x][i]; } } int main(){ for(;;){ scanf("%d", &N); if(N == 0) break; REP(i, N) REP(j, N) G[i][j] = false; int E; scanf("%d", &E); while(E--){ int a, b; scanf("%d %d", &a, &b); --a, --b; G[a][b] = G[b][a] = true; } char buf[MAXN]; scanf(" %s", buf); REP(i, N) R[i] = buf[i] == 'o'; REP(i, N) REP(j, N) U[i][j] = false; REP(i, N) V[i] = false; bool ok = true; REP(i, N) if(!V[i]){ par = false; DFS(i); if(par){ ok = false; break; } } if(!ok) printf("impossible\n"); else{ int res = 0; REP(i, N) FOR(j, i + 1, N - 1) res += U[i][j]; printf("%d\n", res); REP(i, N) FOR(j, i + 1, N - 1) if(U[i][j]) printf("%d %d\n", i + 1, j + 1); } } return 0; }