#include <bits/stdc++.h>
using namespace std;
int n, m, fa[1005], gf[1005], fb[1005], S, M, cnt;
bool vis[100005];
struct edge {
  int u, v, c, id;
  edge() {}
  edge(int uu, int vv, int cc, int ii) { u = uu, v = vv, c = cc, id = ii; }
} e[100005];
bool cmp(edge a, edge b) { return a.c < b.c; }
bool cmp2(edge a, edge b) { return a.id < b.id; }
int find(int x) {
  if (gf[x] == x) return x;
  return gf[x] = find(gf[x]);
}
void gb(int x, int id) {
  if (x == id) return;
  int p = fa[x];
  gb(p, id);
  fa[p] = x;
  fb[p] = fb[x];
  gf[p] = x;
}
int findfar(int x) {
  if (fa[x] == x) return 0;
  return findfar(fa[x]) + 1;
}
void findhuan(int x, int y, int z) {
  int fx = findfar(x), fy = findfar(y);
  if (fx < fy) {
    swap(x, y);
    swap(fx, fy);
  }
  int k = x, id = 0, o = y, lb = 0;
  while (fx != fy) {
    if (e[fb[k]].c == 0) {
      id = k;
      lb = 1;
      break;
    }
    k = fa[k];
    fx--;
  }
  if (id != 0) {
    vis[fb[id]] = 0;
    vis[z] = 1;
    gb(x, id);
    gf[x] = y;
    fa[x] = y;
    fb[x] = z;
    S++;
    M--;
    return;
  }
  while (k != o) {
    if (e[fb[k]].c == 0) {
      id = k;
      lb = 1;
      break;
    }
    if (e[fb[o]].c == 0) {
      id = o;
      lb = 2;
      break;
    }
    k = fa[k];
    o = fa[o];
  }
  if (id == 0) return;
  vis[fb[id]] = 0;
  vis[z] = 1;
  if (lb == 2) swap(x, y);
  gb(x, id);
  gf[x] = y;
  fa[x] = y;
  fb[x] = z;
  S++;
  M--;
}
void gb2(int x) {
  int p = fa[x];
  if (fa[x] == x) return;
  gb2(p);
  fa[p] = x;
  gf[p] = x;
  fb[p] = fb[x];
}
int main() {
  scanf("%d %d", &n, &m);
  if (n % 2 == 0) {
    printf("-1\n");
    return 0;
  }
  for (int i = 1; i <= n; i++) {
    fa[i] = gf[i] = i;
  }
  int id = 0;
  for (int i = 1; i <= m; i++) {
    int u, v;
    char c;
    scanf("%d %d %c", &u, &v, &c);
    if (u > v) swap(u, v);
    id++;
    if (u == v) {
      vis[i] = 1;
    }
    if (c == 'S') e[i] = edge(u, v, 1, id);
    if (c == 'M') e[i] = edge(u, v, 0, id);
  }
  sort(e + 1, e + m + 1, cmp);
  cnt = 0;
  for (int i = 1; i <= m; i++) {
    int a = find(e[i].u);
    int b = find(e[i].v);
    if (a != b && !vis[e[i].id]) {
      cnt++;
      vis[e[i].id] = 1;
      if (e[i].c == 0) M++;
      if (e[i].c == 1) S++;
      gb2(e[i].u);
      fb[e[i].u] = e[i].id;
      fa[e[i].u] = gf[e[i].u] = e[i].v;
    }
  }
  if (cnt != n - 1) {
    printf("-1\n");
    return 0;
  }
  int key = 0;
  if (S == M) key = 1;
  sort(e + 1, e + m + 1, cmp2);
  for (int i = 1; i <= m && !key; i++) {
    if (S == M) {
      key = 1;
      break;
    }
    if (e[i].c == 1 && !vis[e[i].id]) {
      findhuan(e[i].u, e[i].v, e[i].id);
    }
  }
  if (key == 0) {
    printf("-1\n");
    return 0;
  } else {
    printf("%d\n", n - 1);
    int cnt2 = 0, s1 = 0, m1 = 0;
    for (int i = 1; i <= m; i++) {
      if (vis[i] && e[i].u != e[i].v) {
        if (e[i].c == 1)
          s1++;
        else
          m1++;
        printf("%d ", i);
        cnt2++;
      }
    }
    if (cnt2 != n - 1 || s1 != m1) cnt2 /= 0;
  }
}
