#include <bits/stdc++.h>
using namespace std;
void fre() {
  freopen("test.in", "r", stdin);
  freopen("test.out", "w", stdout);
}
void fc() {
  fclose(stdin);
  fclose(stdout);
}
inline long long ccin() {
  long long x = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') x = x * 10 + ch - '0', ch = getchar();
  return x * f;
}
inline void cou(long long x) {
  if (x < 0) putchar('-'), x = -x;
  if (x > 9) cou(x / 10);
  putchar(x % 10 + '0');
}
const int maxn = 2e3 + 10;
const long long inf = 0x7fffffff;
int fat[maxn], fat2[maxn];
int cnth[maxn], cntb[maxn], cnth1, cntb1;
int n, m;
struct edge {
  int u;
  int v;
  char w;
} side[(int)(1e5 + 10)];
int findf(int root) {
  if (fat[root] == root) return root;
  fat[root] = findf(fat[root]);
  return fat[root];
}
int findf2(int root) {
  if (fat2[root] == root) return root;
  fat2[root] = findf2(fat2[root]);
  return fat2[root];
}
int main() {
  n = ccin();
  m = ccin();
  if (n % 2 == 0) {
    cout << -1 << '\n';
    return 0;
  }
  if (n == 1) {
    cout << 0 << '\n';
    return 0;
  }
  for (int i = 1; i <= m; i++) {
    side[i].u = ccin();
    side[i].v = ccin();
    scanf("%c", &side[i].w);
  }
  for (int i = 1; i <= n; i++) fat[i] = i, fat2[i] = i;
  for (int i = 1; i <= m; i++) {
    if (side[i].w == (int)('M')) continue;
    int fat1 = findf(side[i].u);
    int fat2 = findf(side[i].v);
    if (fat1 != fat2) {
      cnth[++cnth1] = i;
      fat[fat1] = fat2;
    }
  }
  if (cnth1 < (n - 1) / 2) {
    cout << -1 << '\n';
    return 0;
  }
  for (int i = 1; i <= m; i++) {
    if (side[i].w == (int)('S')) continue;
    int fat1 = findf(side[i].u);
    int fat2 = findf(side[i].v);
    if (fat1 != fat2) {
      cntb[++cntb1] = i;
      fat[fat1] = fat2;
    }
  }
  if (cntb1 + cnth1 < n - 1) {
    cout << -1 << '\n';
    return 0;
  }
  for (int i = 1; i <= cntb1; i++) {
    int now = cntb[i];
    int fa1 = findf2(side[now].u);
    int fa2 = findf2(side[now].v);
    if (fa1 != fa2) {
      fat2[fa1] = fa2;
    }
  }
  for (int i = 1; i <= m; i++) {
    if (side[i].w == (int)('S')) continue;
    int fa1 = findf2(side[i].u);
    int fa2 = findf2(side[i].v);
    if (fa1 != fa2) {
      fat2[fa1] = fa2;
      cntb[++cntb1] = i;
    }
    if (cntb1 == (n - 1) / 2) break;
  }
  if (cntb1 < (n - 1) / 2) {
    cout << -1 << '\n';
    return 0;
  }
  cou(n - 1);
  printf("\n");
  for (int i = 1; i <= cntb1; i++) {
    cou(cntb[i]);
    printf(" ");
  }
  for (int i = 1; i <= m; i++) {
    if (side[i].w == (int)('M')) continue;
    int fa1 = findf2(side[i].u);
    int fa2 = findf2(side[i].v);
    if (fa1 != fa2) {
      fat2[fa1] = fa2;
      cou(i);
      printf(" ");
    }
  }
  return 0;
}
