package test;
//json是一个递归数据结构,因此可以使用函数的递归调用来进行解析。
//每一类数据对应一个解析函数,代码中parseString实现解析字符串的功能,parseObject实现解析对象的功能。
//解析函数的主体功能就是依次遍历每一个字符,根据字符判断是否是字符串的开始、对象的开始……并进行相应的处理。
//json是一个键值对的结构,因此可以用map存储。map的键可以用查询的格式,用小数点.来分隔多层的键。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Scanner;
class NUN{
int i = 0;
}
public class Main {
static public String parseString(String str, NUN i) {
// String tmp="";//tmp为字符串里面的内容
StringBuffer sb = new StringBuffer();
if (str.charAt(i.i) == '"')
i.i++;// 将移动到字符串的起始位置
while (i.i < str.length()) {
if (str.charAt(i.i) == '\\') {// 截取\后面的字符 单个字符为单引号
i.i++;
// tmp += str.charAt(i);
sb.append(str.charAt(i.i));
i.i++;
} else if (str.charAt(i.i) == '"') {// 已经截取到末尾
i.i++;//移出字符串
break;
} else {
sb.append(str.charAt(i.i));
// tmp += str.charAt(i);
i.i++;
}
}
// if (str.charAt(i.i) == '"')
// i.i++; // 移出字符串
return sb.toString();
}
static public void parseObject(String str, String prefix, Map<String, String> dict, NUN i) {
if (str.charAt(i.i) == '{')
i.i++;// prefix为前缀
String key = "";
String value;// 分别用于存储key和value
Boolean strType = false;// false:key, true:value,用于标识key和value
while (i.i < str.length()) {
if (str.charAt(i.i) == '"') {// 说明此处为key或value
String tmp = parseString(str, i);
if (strType) {// value
value = tmp;
dict.put(key, value);
} else {// key
key = prefix + (prefix == "" ? "" : ".") + tmp;// 如果prefix不为空说明有嵌套,用.进行分隔
}
} else if (str.charAt(i.i) == ':') {// 后面一定为value
strType = true;
i.i++;
} else if (str.charAt(i.i) == ',') {// 后面一定为key
strType = false;
i.i++;
} else if (str.charAt(i.i) == '{') {// 表示内部有嵌套对象
dict.put(key, "");// 对象的值为空
parseObject(str, key, dict, i);
} else if (str.charAt(i.i) == '}') {// 用于跳出内部的嵌套对象
i.i++;
break;
} else {
i.i++;//遇到空格就跳过
}
}
// if (str.charAt(i.i) == '}') {// 将整个json字符串遍历完毕
// i.i++;
// }
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt();
int M = in.nextInt();
String json = new String();
in.nextLine();//将in.nextInt接收传递的回车过滤掉
for (int n = 0; n < N; n++) {
String tmp;
tmp = in.nextLine();
json += tmp;//可以忽略回车,将所有的字符连接一个字符串
}
Map<String, String> dict = new HashMap<String, String>();
NUN i = new NUN();
parseObject(json, "", dict, i);
String query;
for (int m = 0; m < M; m++) {
query = in.nextLine();
if (!dict.containsKey(query)) {
System.out.println("NOTEXIST");
} else {
if (dict.get(query).equals("")) {
System.out.println("OBJECT");
} else {
System.out.println("STRING " + dict.get(query));
}
}
}
}
}