#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e3 + 1, maxm = 1e5 + 1, inf = 1e9;
int n, m, second, E, E_ans, S_ans, ted1, par1[maxn], ted2, par2[maxn];
bool mark[maxm];
vector<pair<int, pair<int, int> > > e_elf, e_santa;
vector<int> ans;
int find1(int x) {
  if (par1[x] == 0) {
    return x;
  }
  return par1[x] = find1(par1[x]);
}
void dsu1(int v, int u) {
  v = find1(v);
  u = find1(u);
  if (u == v) {
    return;
  }
  par1[u] = v;
  ted1--;
  return;
}
int find2(int x) {
  if (par2[x] == 0) {
    return x;
  }
  return par2[x] = find2(par2[x]);
}
void dsu2(int v, int u) {
  v = find2(v);
  u = find2(u);
  if (u == v) {
    return;
  }
  par2[u] = v;
  ted2--;
  return;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cin >> n >> m;
  for (int i = 1; i <= m; i++) {
    int t1, t2;
    char t3;
    cin >> t1 >> t2 >> t3;
    if (t3 == 'S') {
      e_elf.push_back({i, {t1, t2}});
      E++;
    } else {
      e_santa.push_back({i, {t1, t2}});
      second++;
    }
  }
  if (n % 2 == 0) {
    cout << -1 << endl;
    return 0;
  }
  ted1 = n;
  ted2 = n;
  n = n / 2;
  for (auto tmp : e_santa) {
    dsu1(tmp.second.first, tmp.second.second);
  }
  for (auto tmp : e_elf) {
    int tt = ted1;
    dsu1(tmp.second.first, tmp.second.second);
    if (ted1 != tt) {
      dsu2(tmp.second.first, tmp.second.second);
      mark[tmp.first] = 1;
      E_ans++;
      ans.push_back(tmp.first);
    }
  }
  if (ted1 != 1) {
    cout << -1 << endl;
    return 0;
  }
  if (E_ans > n) {
    cout << -1 << endl;
    return 0;
  }
  for (auto tmp : e_elf) {
    if (E_ans == n) {
      break;
    }
    if (mark[tmp.first] == 1) {
      continue;
    }
    int tt = ted2;
    dsu2(tmp.second.first, tmp.second.second);
    if (tt != ted2) {
      E_ans++;
      mark[tmp.first] = 1;
      ans.push_back(tmp.first);
    }
  }
  if (E_ans != n) {
    cout << -1 << endl;
    return 0;
  }
  for (auto tmp : e_santa) {
    int tt = ted2;
    dsu2(tmp.second.first, tmp.second.second);
    if (ted2 != tt) {
      S_ans++;
      mark[tmp.first] = 1;
      ans.push_back(tmp.first);
    }
  }
  if (S_ans != n) {
    cout << -1 << endl;
    return 0;
  }
  cout << ans.size() << endl;
  for (auto tmp : ans) {
    cout << tmp << " ";
  }
  cout << endl;
  return 0;
}
