#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
int n, m;
vector<pair<int, int> > e[N];
vector<int> ans[2];
bool fla[2], flag;
int E[N], d[N];
vector<int> cnt[2];
void DFS(int first, int o, int res) {
  if (flag) return;
  d[first] = o;
  cnt[o].push_back(first);
  for (auto& i : e[first]) {
    if (flag) return;
    int second = (i.second + o) % 2;
    if (d[i.first] == -1)
      DFS(i.first, second != res, res);
    else if (d[i.first] != (second != res))
      flag = true;
  }
}
void SOLVE(int res) {
  memset(d, -1, sizeof(d));
  flag = false;
  for (int i(1); i <= n; i++)
    if (d[i] == -1) {
      cnt[0].clear();
      cnt[1].clear();
      DFS(i, 0, res);
      if (flag) {
        fla[res] = true;
        return;
      }
      for (bool ___ = 1; ___; ___ = 0) {
        int mx = (cnt[1].size() < cnt[0].size());
        for (auto& i : cnt[mx]) ans[res].push_back(i);
      }
    }
}
int main() {
  n = ({
    long long first = 0;
    int n = 0, c = getchar();
    for (; !isdigit(c); c = getchar()) n = c == '-';
    for (; isdigit(c); c = getchar()) first = first * 10 + c - '0';
    n ? -first : first;
  }),
  m = ({
    long long first = 0;
    int n = 0, c = getchar();
    for (; !isdigit(c); c = getchar()) n = c == '-';
    for (; isdigit(c); c = getchar()) first = first * 10 + c - '0';
    n ? -first : first;
  });
  for (int i(1); i <= m; i++) {
    int first = ({
      long long first = 0;
      int n = 0, c = getchar();
      for (; !isdigit(c); c = getchar()) n = c == '-';
      for (; isdigit(c); c = getchar()) first = first * 10 + c - '0';
      n ? -first : first;
    }),
        second = ({
          long long first = 0;
          int n = 0, c = getchar();
          for (; !isdigit(c); c = getchar()) n = c == '-';
          for (; isdigit(c); c = getchar()) first = first * 10 + c - '0';
          n ? -first : first;
        });
    int c = ({
              char c = getchar();
              while (c == ' ' || c == '\n') c = getchar();
              c;
            }) == 'R';
    e[first].push_back({second, c});
    e[second].push_back({first, c});
  }
  SOLVE(0);
  SOLVE(1);
  for (bool ___ = 1; ___; ___ = 0) {
    int res;
    if (fla[0] && fla[1])
      return cout << -1 << "\n", 0;
    else if (fla[0])
      res = 1;
    else if (fla[1])
      res = 0;
    else if (ans[0].size() < ans[1].size())
      res = 0;
    else
      res = 1;
    cout << ans[res].size() << "\n";
    for (auto& i : ans[res]) cout << i << " ";
  }
}
