#include <bits/stdc++.h>   using namespace std;   pair<pair<int, int>, int> e[100010];   int parent[100010];   int Rank[100010];   int sz[100010];   vector<int> v[100010];   bool mark[100010];   bool mark1[100010];   int color[100010];   vector<int> out[2];   bool success[2];   int cnt[2];   int n, m;   int find(int cur) {     if (parent[cur] == cur) return cur;     return parent[cur] = find(parent[cur]);   }   void Union(int x, int y) {     int xroot = find(x);     int yroot = find(y);     if (xroot == yroot) return;     if (Rank[xroot] < Rank[yroot])       parent[xroot] = yroot;     else if (Rank[xroot] > Rank[yroot])       parent[yroot] = xroot;     else {       Rank[xroot]++;       parent[yroot] = xroot;     }   }   void init(int n) {     int i;     for (i = 0; i <= n; ++i) {       Rank[i] = 0;       parent[i] = i;       sz[i] = 0;     }   }   bool dfs(int cur, int c) {     mark[cur] = 1;     color[cur] = c;     cnt[c] += sz[cur];     for (int i = 0; i < v[cur].size(); ++i) {       if (mark[v[cur][i]]) {         if (color[v[cur][i]] == c) return 0;         continue;       }       if (!dfs(v[cur][i], 1 - c)) return 0;     }     return 1;   }   void dfs1(int cur) {     mark1[cur] = 1;     color[cur] = 1 - color[cur];     for (int i = 0; i < v[cur].size(); ++i)       if (!mark1[v[cur][i]]) dfs1(v[cur][i]);   }   void solve(int f) {     int i;     init(n);     success[f] = 0;     for (i = 1; i <= n; ++i) v[i].clear();     for (i = 0; i < m; ++i)       if (e[i].second == f) Union(e[i].first.first, e[i].first.second);     for (i = 0; i < m; ++i)       if (e[i].second != f) {         int x = find(e[i].first.first), y = find(e[i].first.second);         if (x == y) return;         v[x].push_back(y);         v[y].push_back(x);       }     for (i = 1; i <= n; ++i) sz[find(i)]++;     memset(mark, 0, sizeof(mark));     memset(mark1, 0, sizeof(mark1));     for (i = 1; i <= n; ++i) {       cnt[0] = cnt[1] = 0;       if (mark[find(i)]) continue;       if (!dfs(find(i), 0)) return;       if (cnt[0] > cnt[1]) dfs1(find(i));     }     success[f] = 1;     for (i = 1; i <= n; ++i)       if (color[find(i)] == 0) out[f].push_back(i);   }   int main() {     int i, x, y, c;     string s;     scanf( %d , &n);     scanf( %d , &m);     for (i = 0; i < m; ++i) {       scanf( %d , &x);       scanf( %d , &y);       cin >> s;       if (s[0] ==  R )         c = 0;       else         c = 1;       e[i] = make_pair(make_pair(x, y), c);     }     solve(0);     solve(1);     int minn = 1000000, minpos;     for (i = 0; i < 2; ++i)       if (success[i])         if ((int)out[i].size() < minn) {           minn = (int)out[i].size();           minpos = i;         }     if (minn == 1000000)       printf( %d n , -1);     else {       printf( %d n , minn);       for (auto it : out[minpos]) printf( %d  , it);       printf(  n );     }   }   