#include <bits/stdc++.h>
using namespace std;
struct {
  int u, v, d;
} edge[100000 + 10];
char X[3];
int N, M;
int parent[1000 + 10];
bool visit[100000 + 10];
int _find(int u) {
  if (u == parent[u])
    return u;
  else
    return parent[u] = _find(parent[u]);
}
void init() {
  for (int i = 1; i <= 1000; i++) parent[i] = i;
}
bool solve() {
  if (N == 1) {
    puts("0");
    return true;
  }
  if (N % 2 == 0) return false;
  init();
  set<int> S;
  for (int i = 1; i <= M; i++) {
    int u = edge[i].u, v = edge[i].v;
    if (edge[i].d == 0) {
      int x = _find(u), y = _find(v);
      if (x == y) continue;
      S.insert(u);
      S.insert(v);
      parent[x] = y;
    }
  }
  if (S.size() <= N / 2) return false;
  int cnt = 0;
  for (int i = 1; i <= M; i++) {
    int u = edge[i].u, v = edge[i].v;
    if (edge[i].d == 1) {
      int x = _find(u), y = _find(v);
      if (x == y) continue;
      S.insert(u);
      S.insert(v);
      cnt++;
      parent[x] = y;
      visit[i] = true;
    }
  }
  if (S.size() != N) return false;
  cnt = 0;
  S.clear();
  init();
  for (int i = 1; i <= M; i++) {
    int u = edge[i].u, v = edge[i].v;
    if (visit[i]) {
      int x = _find(u), y = _find(v);
      S.insert(i);
      cnt++;
      parent[x] = y;
      visit[i] = true;
    }
  }
  for (int i = 1; i <= M && cnt < (N - 1) / 2; i++) {
    int u = edge[i].u, v = edge[i].v;
    if (visit[i] == false && edge[i].d == 1) {
      int x = _find(u), y = _find(v);
      if (x == y) continue;
      S.insert(i);
      cnt++;
      parent[x] = y;
      visit[i] = true;
    }
  }
  if (cnt != (N - 1) / 2) return false;
  for (int i = 1; i <= M && cnt != N; i++) {
    int u = edge[i].u, v = edge[i].v;
    if (visit[i] == false && edge[i].d == 0) {
      int x = _find(u), y = _find(v);
      if (x == y) continue;
      S.insert(i);
      cnt++;
      parent[x] = y;
      visit[i] = true;
    }
  }
  if (S.size() != N - 1) return false;
  cout << S.size() << endl;
  for (set<int>::iterator it = S.begin(); it != S.end(); it++)
    cout << *it << ' ';
  return true;
}
int main() {
  scanf("%d%d", &N, &M);
  for (int i = 1; i <= M; i++) {
    scanf("%d%d%s", &edge[i].u, &edge[i].v, &X);
    edge[i].d = X[0] == 'S';
  }
  if (!solve()) puts("-1");
  return 0;
}
