import sys class FSA: def __init__(self,): self.initial_state = '0' self.final_states = set() self.transitions = dict() self.alphabet = set() def add_transition(self, state_from, state_to, symbol): if state_from in self.transitions.keys(): if symbol not in self.transitions[state_from].keys(): self.transitions[state_from][symbol] = {state_to} else: self.transitions[state_from][symbol] |= {state_to} else: self.transitions[state_from] = dict() self.transitions[state_from][symbol] = {state_to} def add_final_state(self, state): self.final_states.add(state) def get_final_state(self, string): current_state = self.initial_state for symbol in string: current_state = self.transitions[current_state][symbol] return current_state def accepts(self, string): current_states = {self.initial_state} for symbol in string: next_states = set() for state in current_states: if state in self.transitions and symbol in self.transitions[state]: next_states |= self.transitions[state][symbol] current_states = next_states return bool(current_states.intersection(self.final_states)) fsa = FSA() table = open(sys.argv[1]) for line in table: line = line.rstrip() if len(line.split('\t')) == 3: a, b, c = line.split('\t') fsa.add_transition(a, b, c) fsa.alphabet.add(c) else: fsa.add_final_state(line) for line in sys.stdin: line = line.rstrip() if fsa.accepts(line): print('YES') else: print('NO')