| t | words = [] | t | words = [] |
| while True: | | while True: |
| line = input().strip() | | line = input().strip() |
| if not line: | | if not line: |
| break | | break |
| words.extend(line.split()) | | words.extend(line.split()) |
| sets = {'ALL': set(words)} | | sets = {'ALL': set(words)} |
| program = [] | | program = [] |
| while True: | | while True: |
| line = input().strip() | | line = input().strip() |
| if not line: | | if not line: |
| break | | break |
| program.append(line) | | program.append(line) |
| for line in program: | | for line in program: |
| parts = line.split() | | parts = line.split() |
| if parts[0] == 'print': | | if parts[0] == 'print': |
| set_names = parts[1].split(',') | | set_names = parts[1].split(',') |
| result_set = set() | | result_set = set() |
| for name in set_names: | | for name in set_names: |
| if name in sets: | | if name in sets: |
| result_set |= sets[name] | | result_set |= sets[name] |
| print(' '.join(sorted(result_set))) | | print(' '.join(sorted(result_set))) |
| elif parts[0] == 'search': | | elif parts[0] == 'search': |
| source_names = parts[1].split(',') | | source_names = parts[1].split(',') |
| if parts[2] == 'where': | | if parts[2] == 'where': |
| substring = parts[3] | | substring = parts[3] |
| target_name = parts[5] | | target_name = parts[5] |
| source_set = set() | | source_set = set() |
| for name in source_names: | | for name in source_names: |
| if name in sets: | | if name in sets: |
| source_set |= sets[name] | | source_set |= sets[name] |
| result_set = {item for item in source_set if substring in it | | result_set = {item for item in source_set if substring in it |
| em} | | em} |
| sets[target_name] = result_set | | sets[target_name] = result_set |
| elif parts[2] == 'for': | | elif parts[2] == 'for': |
| search_names = parts[3].split(',') | | search_names = parts[3].split(',') |
| target_name = parts[5] | | target_name = parts[5] |
| source_set = set() | | source_set = set() |
| for name in source_names: | | for name in source_names: |
| if name in sets: | | if name in sets: |
| source_set |= sets[name] | | source_set |= sets[name] |
| search_set = set() | | search_set = set() |
| for name in search_names: | | for name in search_names: |
| if name in sets: | | if name in sets: |
| search_set |= sets[name] | | search_set |= sets[name] |
| result_set = source_set & search_set | | result_set = source_set & search_set |
| sets[target_name] = result_set | | sets[target_name] = result_set |