//P3952
#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
struct Node{ char ch; int dep; };
int t, n, k, vis[200];
char s[110];
int read_O();
int getnum(char *num);
void read_for(char &op, char &ch, int &addO);
void solve(){
memset(vis, 0, sizeof(vis));
scanf("%d", &n); int k = read_O(), ans = 0, allO = 0;
if(n == 1) ans = 1;
stack<Node> st; while(!st.empty()) st.pop();
for(int i = 1; i <= n; ++ i){
char op, ch; int addO; read_for(op, ch, addO);
if(ans) continue;
if(op == 'F' && vis[ch]){ ans = 1; continue; } //变量名重复
vis[ch] = true;
int nowO;
if(op == 'F'){;
if(st.empty()) nowO = addO;
else if(st.top().dep == -1) nowO = -1;
else if(addO == -1) nowO = -1;
else nowO = st.top().dep + addO;
st.push((Node){ ch, nowO });
// printf("k %d %d\n", addO, nowO);
} else {
if(st.empty()){ ans = 1; continue; } //E多
vis[st.top().ch] = false;
st.pop();
}
allO = max(allO, nowO);
}
if(st.size()) ans = 1; //F多
if(!ans) ans = (allO == k ? 0 : 2);
// printf(" ");
if(ans == 0) puts("Yes"); else if(ans == 1) puts("ERR"); else puts("No");
}
int main(){
scanf("%d", &t);
while(t--) solve();
return 0;
}
int read_O(){
scanf("%s", s);
if(s[2] == 'n'){
int p = 4, ans = 0;
while(s[p] >= '0' && s[p] <= '9') ans = ans * 10 + s[p] - '0', ++ p;
k = ans;
} else k = 0;
// printf("k %d\n", k);
return k;
}
int getnum(char *num){
if(num[0] == 'n') return inf;
int p = 0, k = 0;
while(num[p] >= '0' && num[p] <= '9') k = k * 10 + num[p] - '0', ++ p;
return k;
}
void read_for(char &op, char &ch, int &addO){
char op_[3], ch_[3], st_[10], ed_[10]; int st, ed;
memset(st_, 0, sizeof(st_)), memset(ed_, 0, sizeof(ed_));
scanf("%s", op_);
if(op_[0] == 'F'){
scanf("%s %s %s", ch_, st_, ed_);
st = getnum(st_), ed = getnum(ed_);
// printf("%d %d\n", st, ed);
} else { op = 'E'; return; }
op = op_[0], ch = ch_[0];
if(st > ed) addO = -1;
else if(st == ed || (st < ed && ed != inf)) addO = 0;
else addO = 1;
// printf("O %d\n", addO);
}