import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class Main {
public static void main(String[] args)throws ScriptException {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int m = scanner.nextInt();
scanner.nextLine();
String[] expressions = new String[n];
for (int i = 0; i < n; i++) {
expressions[i] = scanner.nextLine();
}
Map<String, String> keyValuePairs = new HashMap<>();
for (int i = 0; i < m; i++) {
String key = scanner.next();
String value = scanner.next();
keyValuePairs.put(key, value);
}
scanner.close();
for (String expression : expressions) {
int result = evaluateExpression(expression, keyValuePairs);
System.out.println(result);
}
}
private static int evaluateExpression(String expression, Map<String, String> keyValuePairs)throws ScriptException {
expression = expression.replaceAll("AND", "&&");
expression = expression.replaceAll("OR", "||");
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
for (Map.Entry <String, String> entry : keyValuePairs.entrySet()) {
System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
engine.put(entry.getKey(),entry.getValue());
}
Object result2 = engine.eval(expression);
System.out.println(result2);
return 0;
}
private static boolean evaluate(String expression, Map<String, String> keyValuePairs) {
if (expression.isEmpty()) {
return false;
}
int index = expression.indexOf(')');
if (index != -1) {
int startIndex = expression.lastIndexOf('(', index);
String subExpression = expression.substring(startIndex + 1, index);
boolean subResult = evaluate(subExpression, keyValuePairs);
String before = expression.substring(0, startIndex);
String after = expression.substring(index + 1);
return evaluate(before + (subResult ? "1" : "0") + after, keyValuePairs);
}
String[] parts = expression.split("OR");
for (String part : parts) {
if (evaluateAnd(part, keyValuePairs)) {
return true;
}
}
return false;
}
private static boolean evaluateAnd(String expression, Map<String, String> keyValuePairs) {
String[] conditions = expression.split("AND");
for (String condition : conditions) {
if (!evaluateCondition(condition, keyValuePairs)) {
return false;
}
}
return true;
}
private static boolean evaluateCondition(String condition, Map<String, String> keyValuePairs) {
String[] parts = condition.split("=");
if (parts.length != 2) {
return false;
}
String key = parts[0];
String value = parts[1].replaceAll("'", "");
return keyValuePairs.getOrDefault(key, "").equals(value);
}
}