#include #include #include #include using namespace std; struct range_t { int lo, hi, parity; }; static map r_lo, r_hi; bool determine(int lo, int hi, int parity) { while(r_lo.find(lo) != r_lo.end()) { // Separate if(hi < r_lo[lo].hi) { int nlo = hi + 1; int nhi = r_lo[lo].hi; int nparity = r_lo[lo].parity ^ parity; r_lo.erase(lo); r_hi.erase(nhi); if(!determine(lo, hi, parity)) return false; if(!determine(nlo, nhi, nparity)) return false; return true; } // Determine if(hi == r_lo[lo].hi) { return (r_lo[lo].parity == parity); } // Reduce Range parity ^= r_lo[lo].parity; lo = r_lo[lo].hi + 1; } while(r_hi.find(hi) != r_hi.end()) { // Separate if(r_hi[hi].lo < lo) { int nlo = r_hi[hi].lo; int nhi = lo - 1; int nparity = r_hi[hi].parity ^ parity; r_lo.erase(nlo); r_hi.erase(hi); if(!determine(nlo, nhi, nparity)) return false; if(!determine(lo, hi, parity)) return false; return true; } // Reduce Range parity ^= r_hi[hi].parity; hi = r_hi[hi].lo - 1; } // Create Range r_lo[lo].lo = r_hi[hi].lo = lo; r_lo[lo].hi = r_hi[hi].hi = hi; r_lo[lo].parity = r_hi[hi].parity = parity; return true; } int main(void) { int n; while(cin >> n) { if(n == -1) break; if(n <= 0 || n > 1000000000) n /= (n - n); r_lo.clear(); r_hi.clear(); int m; cin >> m; if(m < 0) m /= (m - m); bool flag = true; for(int i = 0; i < m; i++) { int lo, hi, parity; string str; cin >> lo >> hi >> str; if(lo > hi) lo /= (lo - lo); parity = -1; if(str == "even") parity = 0; if(str == "odd") parity = 1; if(parity == -1) parity /= (parity - parity); if(flag) { flag = determine(lo, hi, parity); if(!flag) cout << i << endl; } } if(flag) cout << m << endl; } return 0; }