#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int main(){
// freopen("in.txt","r",stdin);
int type[128] = {0};
int n;
string s,str;
cin>>s>>n;
for(int i = 0;i<s.size();++i){
if(s[i+1]==':'){
type[s[i]]=2;
++i;
}
else{
type[s[i]]=1;
}
}
getchar();
//getline(cin,str);
for(int j = 1;j<=n;++j){
map<char,string> res;
getline(cin,str);
stringstream ss(str);
string item,tmp;
ss>>item;
while(ss>>item){
if(item.size()==2&&item[0]=='-'&&type[item[1]]==1){
res[item[1]]="";
}
else if(item.size()==2&&item[0]=='-'&&type[item[1]]==2&&ss>>tmp){
res[item[1]]=tmp;
}
else
break;
}
cout<<"Case "<<j<<":";
// for(auto element:res){
// cout<<" -"<
// if(element.second==""){
// cout<<"";
// }
// else{
// cout<<" "+element.second;
// }
// }
for(map<char,string>::iterator it=res.begin();it!=res.end();++it ){
cout<<" -"<<it->first;
if(it->second==""){
cout<<"";
}
else{
cout<<" "+it->second;
}
}
cout<<endl;
}
return 0;
}
#include
#include
#include
#include
#include
using namespace std;
struct Trade{
double price;
long long num;
bool cancel=false;
bool operator < (const Trade & t)const{
return price > t.price;
}
}a[5005];
priority_queue<Trade> buy,sell;
int main(){
freopen("in.txt","r",stdin);
string str;
int i=1,j;
while(cin>>str){
if(str=="cancel"){
cin>>j;
a[i].cancel=true;
a[j].cancel=true;
}
else if(str=="buy"||str=="sell"){
cin>>a[i].price>>a[i].num;
if(str=="buy")
a[i].price=-a[i].price;
}
i++;
}
for(int k=1;k<i;++k){
if(a[k].cancel==true) continue;
if(a[k].price<0.0){
buy.push(a[k]);
}else
sell.push(a[k]);
}
Trade t;
t.price=0.0;
t.num=0;
while(1){
if(buy.empty()||sell.empty())
break;
Trade b=buy.top(),s=sell.top();
buy.pop();
sell.pop();
if(-b.price>=s.price){
long long k=min(b.num,s.num);
t.num+=k;
t.price=-b.price;
b.num-=k;
s.num-=k;
if(b.num>0) buy.push(b);
if(s.num>0) sell.push(s);
}
else
break;
}
printf("%.2f",fabs(t.price));
cout<<' '<<t.num;
return 0;
}
#include
using namespace std;
int m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int main(){
int a,b,c,y1,y2;
cin>>a>>b>>c>>y1>>y2;
for(int y=y1;y<=y2;++y){
int w,d;
int day=0;
for(int i=1850;i<y;++i){
if(i%400==0||i%4==0&&i%100!=0){
day+=366;
}else
day+=365;
}
if(y%400==0||y%4==0&&y%100!=0){
m[2]=29;
}else{
m[2]=28;
}
for(int i=1;i<a;++i){
day+=m[i];
}
w=day%7+1;
d=(b-1)*7+((w>=c)?(c+7-w):(c-w));
if(d>m[a]){
cout<<"none"<<endl;
} else{
printf("%d/%02d/%02d\n",y,a,d);
}
}
return 0;
}
#include
#include
#include
#include
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char** argv) {
freopen("in.txt","r",stdin);
int m,n;
cin>>m>>n;
string s[m+1];
map<string,string> mp;
getchar();
for(int i=1;i<=m;++i){
getline(cin,s[i]);
}
string key,value;
for(int i=1;i<=n;++i){
cin>>key;
getline(cin,value);
mp[key]=value.substr(2,value.length()-3);
}
int prev,next;
for(int i=1;i<=m;++i){
prev=0;
while(1){
if((prev=s[i].find("{{ ",prev))==string::npos) break;
if((next=s[i].find(" }}",prev))==string::npos) break;
key=s[i].substr(prev+3,next-prev-3);
s[i].replace(prev,next-prev+3,mp.count(key)?mp[key]:"");
prev+=mp.count(key)?mp[key].length():0;
}
cout<<s[i]<<endl;
}
return 0;
}
#include
#include
using namespace std;
char canvas[100][100];
int w,h,q;
void tc(int x,int y,char c){
if(x<0||x>=w||y<0||y>=h||canvas[x][y]=='+'||canvas[x][y]=='-'||canvas[x][y]=='|'||canvas[x][y]==c){
return ;
}
canvas[x][y]=c;
tc(x+1,y,c);
tc(x-1,y,c);
tc(x,y+1,c);
tc(x,y-1,c);
}
int main(){
cin>>w>>h>>q;
int flag[100]={0};
int x1,y1,x2,y2,x,y;
char c;
for(int i=h-1;i>=0;--i){
for(int j=0;j<w;++j){
canvas[j][i]='.';
}
}
for(int k=0;k<q;++k){
cin>>flag[k];
//填充
if(flag[k]){
cin>>x>>y>>c;
tc(x,y,c);
}
//划线
else{
cin>>x1>>y1>>x2>>y2;
//竖线
if(x1==x2){
int ymin,ymax;
ymin=min(y1,y2);
ymax=max(y1,y2);
for(int j=ymin;j<=ymax;++j){
if(canvas[x1][j]=='-'||canvas[x1][j]=='+')
canvas[x1][j]='+';
else{
canvas[x1][j]='|';
}
}
}
//横线
else if(y1==y2){
int xmin,xmax;
xmin=min(x1,x2);
xmax=max(x1,x2);
for(int i=xmin;i<=xmax;++i){
if(canvas[i][y1]=='|'||canvas[i][y1]=='+')
canvas[i][y1]='+';
else{
canvas[i][y1]='-';
}
}
}
}
}
for(int i=h-1;i>=0;--i){
for(int j=0;j<w;++j){
cout<<canvas[j][i];
}
cout<<endl;
}
return 0;
}
#include
#include
#include
#include
#include
using namespace std;
int main(){
freopen("in.txt","r",stdin);
int n,pos;
string cur,road;
cin>>n>>cur;
getchar();
while(n--){
getline(cin,road);
if(road[0]!='/'){
road=cur+"/"+road+"/";
}
while((pos=road.find("//"))!=-1){
int count=2;
while(road[pos+count]=='/'){
count++;
}
road.erase(pos,count-1);
}
while((pos=road.find("/./"))!=-1){
road.erase(pos+1,2);
}
if(road.size()>1&&road[road.size()-1]=='/'){
road.erase(road.size()-1);
}
while((pos=road.find("/../"))!=-1){
if(pos==0){
road.erase(pos,3);
}
else{
int spos;
spos=road.rfind("/",pos-1);
road.erase(spos,pos-spos+3);
}
if(road.size()==0){
road="/";
}
}
cout<<road<<endl;
}
return 0;
}
#include
#include
#include
using namespace std;
int main(){
int n,cur=0;
cin>>n;
vector<pair<int,int> > player[2]={{{30,0}},{{30,0}}};
while(n--){
string command;
int a,b,c;
cin>>command;
if(command=="summon"){
cin>>a>>b>>c;
player[cur].insert(player[cur].begin()+a,{c,b});
}
else if(command=="attack"){
cin>>a>>b;
player[cur][a].first-=player[cur^1][b].second;
player[cur^1][b].first-=player[cur][a].second;
if(player[cur][a].first<=0&&a!=0){
player[cur].erase(player[cur].begin()+a);
}
if(player[cur^1][b].first<=0&&b!=0){
player[cur^1].erase(player[cur^1].begin()+b);
}
}
else if(command=="end"){
cur^=1;
}
}
if(player[0][0].first>0&&player[1][0].first>0){
cout<<"0"<<endl;
}
else if(player[0][0].first>0){
cout<<"1"<<endl;
}
else if(player[1][0].first>0){
cout<<"-1"<<endl;
}
for(int i=0;i<2;++i){
cout<<player[i][0].first<<endl<<player[i].size()-1<<' ';
for(int j=1;j<player[i].size();++j){
cout<<player[i][j].first<<' ';
}
cout<<endl;
}
return 0;
}
#include
#include
#include
#include
#include
#include
using namespace std;
unordered_map<string,int> privilige;
unordered_map<string,unordered_map<string,int> >role,user;
pair<string,int> split(string&s){
int i=s.find(':');
int level=(i!=string::npos)?stoi(s.substr(i+1)):-1;
return make_pair(s.substr(0,i),level);
}
int main(){
int p;
cin>>p;
getchar();
while(p--){
string s;
cin>>s;
privilige.insert(split(s));
}
int r;
cin>>r;
while(r--){
string s1,s2;
int n;
cin>>s1>>n;
while(n--){
cin>>s2;
pair<string,int> p=split(s2);
if(role[s1].find(p.first)!=role[s1].end()){
role[s1][p.first]=max(role[s1][p.first],p.second);
}
else{
role[s1][p.first]=p.second;
}
}
}
int u;
cin>>u;
while(u--){
string s1,s2;
int n;
cin>>s1>>n;
while(n--){
cin>>s2;
for(auto &i:role[s2]){
if(user[s1].find(i.first)!=user[s1].end()){
user[s1][i.first]=max(user[s1][i.first],i.second);
}
else{
user[s1][i.first]=i.second;
}
}
}
}
int q;
cin>>q;
while(q--){
string s1,s2;
cin>>s1>>s2;
pair<string,int> p=split(s2);
if(user.find(s1)!=user.end()&&user[s1].find(p.first)!=user[s1].end()&&p.second<=user[s1][p.first]){
if(p.second==-1&&user[s1][p.first]!=-1){
cout<<user[s1][p.first]<<endl;
}
else{
cout<<"true"<<endl;
}
}
else{
cout<<"false"<<endl;
}
}
return 0;
}
#include
using namespace std;
void solve(string &str){
int pos=0;
while(1){
pos=str.find("_");
if(pos==string::npos) break;
int t=str.find("_",pos+1);
str.replace(t,1,"");
str.replace(pos,1,"");
}
while(1){
pos=str.find("[");
if(pos==string::npos) break;
int t=str.find("]",pos+1);
int end=str.find(")",t+2);
string text,link;
text=str.substr(pos+1,t-pos-1);
link=str.substr(t+2,end-t-2);
str.replace(pos,end-pos+1,"+link+"\">"+text+"");
}
}
int main(){
freopen("in.txt","r",stdin);
vector<string> html;
int flag=0;
string line;
while(getline(cin,line)){
if(line.size()==0){
if(flag==1){
html.push_back("");
}
else if(flag==2){
html[html.size()-1]+="";
}
flag=0;
continue;
}
else if(line[0]=='#'){
int cnt=count(line.begin(),line.end(),'#');
string tmp;
tmp=";
char c=cnt+'0';
tmp+=c;
tmp+=">";
int s=cnt;
while(line[s]==' ') s++;
string content=line.substr(s);
solve(content);
tmp+=content+" +c+">";
html.push_back(tmp);
}
else if(line[0]=='*'){
if(flag==0){
flag=1;
html.push_back(""
);
}
int s=1;
while(line[s]==' ') s++;
string tmp,content;
content=line.substr(s);
solve(content);
tmp="" +content+"";
html.push_back(tmp);
}
else{
string tmp,content;
if(flag==0){
flag=2;
tmp+=""
;
}
content=line;
solve(content);
tmp+=content;
html.push_back(tmp);
}
}
if(flag==1) html.push_back("");
else if(flag==2) html[html.size()-1]+="";
for(int i=0;i<html.size();++i) cout<<html[i]<<endl;
return 0;
}
/* CCF201703-3 Markdown */
#include
using namespace std;
string line, text;
// 段落处理
void solve()
{
// 处理下划线:标签
size_t leftp = text.find("_");
while(leftp != string::npos) {
text.replace(leftp, 1, "");
size_t rightp = text.find("_", leftp);
text.replace(rightp, 1, "");
leftp = text.find("_", rightp);
}
// 处理方括号
leftp = text.find("[");
while(leftp != string::npos) {
size_t rightp = text.find("]", leftp);
size_t leftp2 = text.find("(", rightp);
size_t rightp2 = text.find(")", leftp2);
string tmp = text.substr(leftp + 1, rightp - leftp - 1);
string tmp2 = text.substr(leftp2 + 1, rightp2 - leftp2 - 1);
text.replace(text.begin() + leftp, text.begin()+rightp2 + 1, " + tmp2 + "\">" + tmp + "");
leftp = text.find("[", rightp2);
}
if(text[0] == '#') {
// 处理#:标签
int i = 0;
while(text[i] == '#') i++;
text = " + string(1, '0' + i) + ">" + text.substr(i + 1);
text.insert(text.size() - 1, " + string(1, '0' + i) + ">");
} else if(text[0] == '*') {
// 处理*:标签......
text.insert(0, "\n"
);
text.insert(text.size(), "\n");
size_t leftp = text.find("*");
while(leftp != string::npos) {
size_t rightp = text.find("\n", leftp);
text.insert(rightp, "");
text.replace(leftp, 2, "" );
leftp = text.find("*", rightp);
}
} else {
// 处理段落:
text = ""
+ text.substr(0, text.size() - 1) + "\n";
}
cout << text;
text = "";
}
int main()
{
freopen("in.txt","r",stdin);
bool flag = false;
getline(cin, line);
for(; ;) {
if(line.size() > 0)
text += line + "\n";
else if(line.size() == 0 && text.size() > 0)
solve();
if(flag) break;
if(!getline(cin, line)) {
flag = true;
line = "";
}
}
return 0;
}
/*
# Heading
## Sub-heading
Paragraphs are separated
by a blank line.
text attributes _italic_.
Bullet list:
* apples
* oranges
* pears
A [link](http://example.com).
*/
#include
using namespace std;
int n,m;
string s,key;
map<string,string> json;
int state;
void handle(string &s){
for(int i=0;i<s.size();++i){
if(s[i]=='{'){
if(state==0){
key="";
}else{
json[key]="OBJECT";
}
state=1;
}
else if(s[i]=='}'){
int j;
for(j=key.size()-1;j>=0;--j){
if(key[j]=='.') break;
}
if(j>=0){
key=key.substr(0,j);
}
else{
key="";
}
}
if(s[i]==':') state=2;
if(s[i]==',') state=1;
if(s[i]=='"'){
string tmp;
for(i++;s[i];++i){
if(s[i]=='\\'){
tmp+=s[++i];
}
else if(s[i]=='"') break;
else tmp+=s[i];
}
if(state==1){
if(key=="") key=tmp;
else key+='.'+tmp;
state=2;
}
else if(state==2){
json[key]="STRING "+tmp;
int j;
for(j=key.size()-1;j>=0;--j){
if(key[j]=='.') break;
}
if(j>=0) key=key.substr(0,j);
else key="";
state=1;
}
}
}
}
int main(){
cin>>n>>m;
getchar();
state=0;
while(n--){
getline(cin,s);
handle(s);
}
while(m--){
cin>>s;
cout<<(json[s]==""?"NOTEXIST":json[s])<<endl;
}
return 0;
}
#include
using namespace std;
unordered_map<string,int> monthsAndWeeks={
{"jan",1},{"feb",2},{"mar",3},{"apr",4},{"may",5},{"jun",6},{"jul",7},{"aug",8},{"sep",9},{"oct",10},{"nov",11},{"dec",12},
{"sun",0},{"mon",1},{"tue",2},{"wed",3},{"thu",4},{"fri",5},{"sat",6}
};
int n,monthdays[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
long long s,t;
const int year=(int)(1e8),month=(int)(1e6),day=10000,hour=100;
string crontab[5];
vector<string> command;
set<int> commandTime[5];
map<long long,vector<int> > ans;
int daysOfMonth(int y,int m){
if((y%400==0||y%4==0&&y%100!=0)&&m==2) return 29;
return monthdays[m];
}
int determineMonthOrWeek(string s){
if(isdigit(s[0])) return stoi(s);
for(char &c:s) c=tolower(c);
return monthsAndWeeks[s];
}
int determineWeek(int y,int m,int d,int week=4){
for(int i=1970;i<y;++i){
int temp=(i%400==0||i%4==0&&i%100!=0)?366:365;
week=(week+temp)%7;
}
for(int i=1;i<m;++i){
week=(week+daysOfMonth(y,i))%7;
}
return (week+d-1)%7;
}
void splitCommand(){
for(int i=0;i<5;++i){
commandTime[i].clear();
if(crontab[i]=="*"){
int left=0,right=59;
if(i==1) right=23;
else if(i==2){
left =1;
right=31;
}else if(i==3){
left=1;
right=12;
}else if(i==4){
right=6;
}
for(int j=left;j<=right;++j){
commandTime[i].insert(j);
}
}
else{
for(int j=0,k1=0;true;j=k1+1){
k1=crontab[i].find(',',j);
string temp=crontab[i].substr(j,k1==string::npos?k1:k1-j);
int k2=temp.find('-');
int p1=determineMonthOrWeek(temp.substr(0,k2)),p2;
if(k2==string::npos){
p2=p1;
}
else{
p2=determineMonthOrWeek(temp.substr(k2+1));
}
for(int k=p1;k<=p2;++k){
commandTime[i].insert(k);
}
if(k1==string::npos){
break;
}
}
}
}
}
void computeCrontab(int c){
for(int y=s/year;y<=t/year;++y){
for(int m:commandTime[3]){
for(int d:commandTime[2]){
if(d>daysOfMonth(y,m)){
continue;
}
if(find(commandTime[4].begin(),commandTime[4].end(),determineWeek(y,m,d))!=commandTime[4].end()){
for(int h:commandTime[1]){
for(int minute:commandTime[0]){
long long temp=(long long)y*year+m*month+d*day+h*hour+minute;
if(temp>=s&&temp<t){
ans[temp].push_back(c);
}
}
}
}
}
}
}
}
int main(){
cin>>n>>s>>t;
command.resize(n);
for(int i=0;i<n;++i){
for(int j=0;j<5;++j){
cin>>crontab[j];
}
cin>>command[i];
splitCommand();
computeCrontab(i);
}
for(auto&i:ans){
for(auto j:i.second){
printf("%lld %s\n",i.first,command[j].c_str());
}
}
return 0;
}
#include
using namespace std;
bool isStringDigit(const string&s){//判断字符串是否为整数字符串
for(char c:s)
if(!isdigit(c))
return false;
return true;
}
int main(){
freopen("in.txt","r",stdin);
int n,m;
cin>>n>>m;
vector<pair<string,regex> > rules;
vector<pair<regex,string> > trans={
{regex("" ),"([0-9]+)"},{regex("" ),"([^/]+)"},{regex("" ),"(.+)"}
};
while(n--){
string p,r;
cin>>p>>r;
for(auto &i:trans){
p=regex_replace(p,i.first,i.second);
}
rules.push_back({r,regex(p)});
}
smatch result;
int flag=0;
while(m--){
string s;
cin>>s;
for(auto i:rules){
if(regex_match(s,result,i.second)){
flag=1;
cout<<i.first;
for(auto j=1;j<=result.size();++j){
s=result.str(j);
if(s!=""&&isStringDigit(s)){
cout<<' '<<stoi(s);
}
else{
cout<<' '<<s;
}
}
cout<<endl;
break;
}
else{
flag=0;
}
}
if(!flag){
cout<<"404"<<endl;
}
}
return 0;
}
#include
using namespace std;
struct element{
int father;
string label,id;
};
vector<element>elements(105);
vector<vector<int> > series;
int main(){
freopen("in.txt","r",stdin);
int n,m;
cin>>n>>m;
getchar();
string line;
for(int i=1;i<=n;++i){
getline(cin,line);
int j=0,k=0;
while(line[j]=='.') ++j;
if(series.size()<=j/2){
series.push_back({i});
}
else{
series[j/2].push_back(i);
}
for(k=j;k<line.size()&&line[k]!=' ';++k);
elements[i].label=line.substr(j,k-j);
for(auto &c:elements[i].label){
c=tolower(c);
}
elements[i].id=(k==line.size())?"":line.substr(k+1);
elements[i].father=j/2-1<0?-1:series[j/2-1].back();
}
while(m--){
getline(cin,line);
vector<string> query;
for(int i=0;i<line.size();++i){
int j=i;
while(j<line.size()&&line[j]!=' '){
++j;
}
string s=line.substr(i,j-i);
if(s[0]!='#'){
for(auto &c:s){
c=tolower(c);
}
}
query.push_back(s);
i=j;
}
vector<int>ans;
for(int i=query.size()-1;i<series.size();++i){
for(int j:series[i]){
if(elements[j].label==query.back()||elements[j].id==query.back()){
int k=query.size()-2;
for(int p=elements[j].father;k>=0&&p!=-1;p=elements[p].father){
if(elements[p].label==query[k]||elements[p].id==query[k])
--k;
}
if(k<0){
ans.push_back(j);
}
}
}
}
cout<<ans.size()<<' ';
for(auto i:ans){
cout<<i<<' ';
}
cout<<endl;
}
return 0;
}
#include
using namespace std;
const int N=1e6+10;
long long P[34];
struct IP{
long long s;
int len;
bool operator < (const IP &u) const{
if(s<u.s) return true;
if(s>u.s) return false;
return len<u.len;
}
}ip[N];
bool ziji(IP a,IP b){
if(a.len>b.len) return false;
if(a.s/P[a.len+1]!=b.s/P[a.len+1]) return false;
return true;
}
int l[N];
string ans[N];
int main(){
P[33]=1;
for(int i=32;i>=0;i--){
P[i]=2*P[i+1];
}
int n;
cin>>n;
if(n==0) return 0;
string str;
for(int k=0;k<n;++k){
cin>>str;
int t=0,num1=0,num2=0;
long long ret=0;
for(int i=0;i<str.size();++i){
if(str[i]=='/'){
ret=ret*256+t;
num2++;
t=0;
for(int j=i+1;j<str.size();++j){
t=t*10+str[j]-'0';
}
ip[k].len=t;
t=0;
break;
}
else if(str[i]=='.'){
ret=ret*256+t;
num1++;
t=0;
}
else t=t*10+str[i]-'0';
}
if(!num2) ret=ret*256+t;
if(num1<3){
for(int i=3;i>num1;i--){
ret=ret*256;
}
}
if(!num2) ip[k].len=(num1+1)*8;
ip[k].s=ret;
}
sort(ip,ip+n);
int cnt=0;
for(int i=1;i<n;++i){
if(!ziji(ip[cnt],ip[i])) {
ip[++cnt]=ip[i];
}
}
n=cnt+1;
for(int i=0;i<n;++i){
l[i]=i-1;
}
for(int i=1;i<n;i++)
{
for(int j=l[i];j!=-1;j=l[j])
{
if(ip[i].len!=ip[j].len) break;
int l0=ip[i].len;
if(ip[i].s/P[l0]!=ip[j].s/P[l0]) break;
ip[i].s=ip[j].s;
ip[i].len--;
l[i]=l[j];
}
}
//转化为输出格式
cnt=0;
for(int i=n-1;i!=-1;i=l[i])
{
ans[cnt]="";
int t=0;
for(int j=1;j<=4;j++)
{
t=(ip[i].s%P[(j-1)*8+1])/P[j*8+1];
string s="";
do
{
s+='0'+t%10;
t/=10;
}while(t);
for(int k=s.length()-1;k>=0;k--)
ans[cnt]+=s[k];
if(j==4) break;
ans[cnt]+=".";
}
ans[cnt]+='/';
t=ip[i].len;
string s="";
do
{
s+='0'+t%10;
t/=10;
}while(t);
for(int k=s.length()-1;k>=0;k--)
ans[cnt]+=s[k];
cnt++;
}
//输出
for(int i=cnt-1;i>=0;i--)
cout<<ans[i]<<endl;
return 0;
}
#include
using namespace std;
struct Node {
int func;
vector<int> in;
vector<int> out;
} device[505];
int Q,M,N,S;
unordered_map<string,int> um;
int input[10005][505];
int ind[505];
int ans[505];
vector<int> v[505];
void mp_init() {
um["NOT"]=0;
um["AND"]=1;
um["OR"]=2;
um["XOR"]=3;
um["NAND"]=4;
um["NOR"]=5;
}
bool topolog() {
queue<int> q;
for(int i=1; i<=N; ++i) {
if(!ind[i]) {
q.push(i);
}
}
int cnt=0;
while(!q.empty()) {
int f=q.front();
q.pop();
++cnt;
for(auto i:v[f]) {
ind[i]--;
if(!ind[i]) {
q.push(i);
}
}
}
return cnt==N;
}
int Operation(vector<int> q,int func) {
if(func==0) return !q[0];
else {
int cnt=q.size();
int r=q[0];
if(func==1) {
for(int i=1; i<cnt; ++i) {
r&=q[i];
}
return r;
} else if(func==2) {
for(int i=1; i<cnt; ++i) {
r|=q[i];
}
return r;
} else if(func==3) {
for(int i=1; i<cnt; ++i) {
r^=q[i];
}
return r;
} else if(func==4) {
for(int i=1; i<cnt; ++i) r &= q[i];
return !r;
} else if(func==5) {
for(int i=1; i<cnt; ++i) r |= q[i];
return !r;
}
}
}
int dfs(int s,int u) {
if(ans[u]!=-1) return ans[u];
vector<int> t;
for(auto i:device[u].in) {
t.push_back(input[s][i]);
}
for(auto i:device[u].out) {
t.push_back(dfs(s,i));
}
ans[u]=Operation(t,device[u].func);
return ans[u];
}
int main() {
freopen("in.txt","r",stdin);
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
mp_init();
cin>>Q;
while(Q--) {
cin>>M>>N;
for(int i=1; i<=N; ++i) {
v[i].clear();
ind[i]=0;
device[i].in.clear();
device[i].out.clear();
}
for(int i=1; i<=N; ++i) {
string str;
cin>>str;
device[i].func=um[str];
int k;
cin>>k;
for(int j=0; j<k; ++j) {
cin>>str;
int num=stoi(str.substr(1));
if(str[0]=='I') {
device[i].in.push_back(num);
} else {
v[num].push_back(i);
ind[i]++;
device[i].out.push_back(num);
}
}
}
cin>>S;
for(int i=0; i<S; ++i) {
for(int j=1; j<=M; ++j) {
cin>>input[i][j];
}
}
bool flag=topolog();
if(!flag) {
cout<<"LOOP"<<endl;
}
for(int i=0; i<S; ++i) {
int s,num;
cin>>s;
memset(ans,-1,sizeof(ans));
for(int j=0; j<s; ++j) {
cin>>num;
if(flag) {
cout<<dfs(i,num);
if(j==s-1) cout<<endl;
else cout<<' ';
}
}
}
}
return 0;
}