#include <bits/stdc++.h>
using namespace std;
const int N = 1e3 + 5;
const int M = 2 * 1e5 + 5;
int fst[N], nxt[M], f[N], fa[N], tot, lca[M], sum[N], dep[N];
int sta[N], n, m;
struct Edge {
  int u, v, co;
} a[M];
bool tree[M];
int gf(int x) { return x == f[x] ? x : f[x] = gf(f[x]); }
void build(int x, int y, int co) {
  a[tot] = (Edge){x, y, co};
  nxt[tot] = fst[x];
  fst[x] = tot++;
}
void dfs0(int x) {
  int y;
  sta[x] = 1;
  for (int p = fst[x]; ~p; p = nxt[p]) {
    y = a[p].v;
    if (~sta[y]) continue;
    tree[p / 2] = 1;
    dfs0(y);
  }
}
void dfs(int x, int depth, int s) {
  int y;
  sta[x] = 0;
  dep[x] = depth;
  sum[x] = s;
  for (int p = fst[x]; ~p; p = nxt[p]) {
    y = a[p].v;
    if (~sta[y]) lca[p / 2] = gf(y);
    if (~sta[y] || !tree[p / 2]) continue;
    fa[y] = p;
    dfs(y, depth + 1, s + a[p].co);
  }
  sta[x] = 1;
  f[x] = a[fa[x]].u;
}
int main() {
  int x, y, co, fs = 0, cnt0, cnt1, z, k, len, o;
  char ch;
  scanf("%d%d", &n, &m);
  tot = 0;
  memset(fst, -1, sizeof(fst));
  for (int i = (0); i < (m); i++) {
    scanf("%d%d %c", &x, &y, &ch);
    x--, y--;
    co = ch == 'S' ? 0 : 1;
    build(x, y, co);
    build(y, x, co);
  }
  memset(sta, -1, sizeof(sta));
  dfs0(0);
  for (int i = (0); i < (n); i++)
    if (sta[i] == -1) {
      puts("-1");
      return 0;
    }
  cnt0 = cnt1 = 0;
  for (int i = (0); i < (m); i++) {
    if (!tree[i]) continue;
    if (a[i << 1].co == 0)
      cnt0++;
    else
      cnt1++;
  }
  if (cnt0 < cnt1) {
    for (int i = (0); i < (tot); i++) a[i].co ^= 1;
    swap(cnt0, cnt1);
  }
  int T = cnt0 - cnt1;
  while (T > 0) {
    for (int i = (0); i < (n); i++) {
      f[i] = i;
      fa[i] = -1;
      sta[i] = -1;
    }
    dfs(0, 0, 0);
    k = -1;
    for (int i = (0); i < (m); i++) {
      if (!a[i << 1].co || tree[i]) continue;
      x = a[i << 1].u;
      y = a[i << 1].v;
      z = lca[i];
      cnt1 = sum[x] + sum[y] - 2 * sum[z];
      len = dep[x] + dep[y] - 2 * dep[z];
      cnt0 = len - cnt1;
      if (cnt0) {
        k = i;
        break;
      }
    }
    if (k == -1) break;
    x = a[k << 1].u;
    y = a[k << 1].v;
    z = lca[k];
    o = -1;
    while (x != z) {
      if (!a[fa[x]].co) {
        o = fa[x] / 2;
        break;
      }
      x = a[fa[x]].u;
    }
    while (y != z) {
      if (!a[fa[y]].co) {
        o = fa[y] / 2;
        break;
      }
      y = a[fa[y]].u;
    }
    tree[o] = 0;
    tree[k] = 1;
    T -= 2;
  }
  if (T)
    puts("-1");
  else {
    printf("%d\n", n - 1);
    for (int i = (0); i < (m); i++)
      if (tree[i]) {
        if (fs++) printf(" ");
        printf("%d", i + 1);
      }
    puts("");
  }
  return 0;
}
