#include #define MAX 10100 int degree[MAX]; int visited[MAX]; int nasl[MAX][MAX]; int poz[MAX]; int maska[MAX*MAX]; int maska2[MAX*MAX]; int pocet; int N, E; int DFS(int v) { if (visited[v]) return 0; visited[v] = 1; //printf("DFS %d\n", v); int sum = 0; for (int i = 0; i < degree[v]; i++) { int ret = DFS(nasl[v][i]); if (ret) { maska[pocet] = nasl[v][i]; maska2[pocet++] = v; } sum += ret; } return (sum + poz[v]) % 2; } int main() { while (1) { scanf("%d %d\n", &N, &E); //printf("%d %d\n", N, E); if (N == 0) break; for (int i = 0; i < N; i++) degree[i] = 0; for (int i = 0; i < N; i++) visited[i] = 0; for (int i = 0; i < E; i++) { int a, b; scanf("%d %d\n", &a, &b); a--; b--; nasl[a][degree[a]++] = b; nasl[b][degree[b]++] = a; } for (int i = 0; i < N; i++) { char ch = getchar(); if (ch == 'e') poz[i] = 0; else poz[i] = 1; } pocet = 0; int bad = 0; for (int j = 0; j < N; j++) { if (DFS(j)) bad = 1; } if (bad) { printf("impossible\n"); } else { printf("%d\n", pocet); for (int i = 0; i < pocet; i++) { printf("%d %d\n", maska[i]+1, maska2[i]+1); } } } return 0; }