P3952
/*
#pragma GCC optimize (3, "Ofast", "inline")
#pragma GCC optimize ("unroll-loops")
#pragma GCC target ("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#pragma GCC optimize ("no-stack-protector")
*/
/*
---------------------------* T I P S *-----------------------------
Date: Jul.18th
Author: uFTvL9(xwzy)
message: Simulation
Title: complexity.cpp/.in/.out
Score: 0
Score':
tips: complexity simulation problem
-------------------------------------------------------------------
*/
#include <bits/stdc++.h>
using namespace std;
inline int work();
inline bool complie_(char[105][10], int);
inline bool complie_FE(char[105][10], int);
inline bool complie_Variable(char[105][10], int);
inline int check_Tcomplexity(char[105][10], int);
inline bool is_digit(const char);
int main(void) {
//#if !ONLINE_JUDGE
freopen("complexity.in", "r", stdin);
freopen("complexity.out", "w", stdout);
//#endif
return work();;
}
inline int work() {
int t; cin >> t;
while(t--) {
int L; cin >> L;
if(L <= 1) {
cout << "ERR" << endl;
continue;
}
char program[L][10];
char Tcomplexity_input[10];
cin >> Tcomplexity_input;
for(int i = 0; i < L; i++)
cin >> program[i];
bool flag = complie_(program, L);
if(flag == false) {
cout << "ERR" << endl;
continue;
}
int power_N = check_Tcomplexity(program, L);
if(power_N == 0) {
int p = strlen(Tcomplexity_input);
for(int i = 0; i < p; i++) {
if(Tcomplexity_input[i] == '('){
if(Tcomplexity_input[i + 1] != '1') {
cout << "No" << endl;
continue;
}
}
}
}
if(power_N != 0) {
int p = strlen(Tcomplexity_input);
for(int i = 0; i < p; i++) {
if(Tcomplexity_input[i] == '^') {
if(Tcomplexity_input[i + 1] != (char)(power_N + '0')) {
cout << "No" << endl;
continue;
}
}
}
}
cout << "Yes" << endl;
}
return 0;
}
/* functions */
inline bool is_digit(const char ch) {
return '0' <= ch && ch <= '9';
}
inline bool complie_(char program[105][10], int L) {
bool flag = complie_FE(program, L);
if(flag == false)
return false;
flag = complie_Variable(program, L);
if(flag == false)
return false;
return true;
}
inline bool complie_FE(char program[105][10], int L) {
char stack_FE[50]; int top = 0;
if(program[0][0] != 'F')
return false;
stack_FE[top] == 'F';
top++;
for(int i = 1; i < L; i++) {
if(program[i][0] == 'F') {
stack_FE[top] == 'F';
top++;
}
else {
if(top == 0)
return false;
if(program[i][0] = 'E')
top--;
else
return false;
}
}
return false;
}
inline bool complie_Variable(char program[105][10], int L) {
char stack_var_list[100]; int top = 0;
for(int i = 0; i < L; i++) {
if(program[i][0] == 'F') {
for(int j = 0; j < top; j++)
if(program[i][2] == stack_var_list[j])
return false;
stack_var_list[top] = program[i][2];
top++;
}
if(program[i][0] == 'E') {
if(top == 0)
return false;
top--;
}
}
return true;
}
inline int check_Tcomplexity(char program[105][10], int L) {
int power_N = 0;
int Maxpower = 0;
for(int i = 0; i < L; i++) {
if(program[i][0] == 'F') {
if(program[i][6] != 'n')
power_N += 0;
if(program[i][4] == 'n')
power_N += 1;
}
if(program[i][0] == 'E') {
Maxpower = max(Maxpower, power_N);
power_N = 0;
}
}
return Maxpower;
}
/* AREA LINE */