import sys sys.setrecursionlimit(5000) arg = [['0' ,'0' ,'b'], ['0', '0', 'c'], ['0', '1', 'a'], ['1', '1', 'a'], ['1', '2', 'b'], ['2', '1', 'a'], ['2', '3', 'c'], ['3', '3', 'a'], ['3', '3', 'b'], ['3', '3', 'c'], ['2', '0', 'b'], ['1', '0', 'c'], '3'] def write_answer(answer): with open(output_file, 'a') as file: file.write(answer+'\n') def line_checking(row, position): stack = [(row, position)] while stack: help_row, help_position = stack.pop() if help_row == '\n': if help_position in what_is_the_ended_positions(): return True else: return False next_character_array = find_next_position(help_position, help_row[0]) if next_character_array: for element_in_next_position_array in next_character_array: stack.append((help_row[1:], element_in_next_position_array)) return False def find_next_position(position, character): take_all_possible_positions = [] for row_used_table in arg: if len(row_used_table) != 1: if position == row_used_table[0] and character == row_used_table[2]: take_all_possible_positions.append(row_used_table[1]) return take_all_possible_positions def what_is_the_ended_positions(): array = [] for row in arg: if len(row) == 1: array += row return array # used_table = 'test.arg' # input_file = 'test.in' # output_file = 'test.out' # used_table = sys.argv[1] input_file = sys.argv[1] output_file = sys.argv[2] with open(output_file, 'w') as readed_output_file: with open(input_file, 'r') as readed_input_file: for row_input_file in readed_input_file: if line_checking(row_input_file, '0'): write_answer('YES') else: write_answer('NO')