| t | import sys | t | import sys |
| words = set() | | words = set() |
| while True: | | while True: |
| try: | | try: |
| line = input().strip() | | line = input().strip() |
| except EOFError: | | except EOFError: |
| break | | break |
| if not line: | | if not line: |
| break | | break |
| for word in line.split(): | | for word in line.split(): |
| words.add(word) | | words.add(word) |
| sets = {'ALL': words} | | sets = {'ALL': words} |
| while True: | | while True: |
| try: | | try: |
| line = input().strip() | | line = input().strip() |
| except EOFError: | | except EOFError: |
| break | | break |
| if not line: | | if not line: |
| break | | break |
| tokens = line.split() | | tokens = line.split() |
| if tokens[0] == 'print': | | if tokens[0] == 'print': |
| set_names = tokens[1].split(',') | | set_names = tokens[1].split(',') |
| union = set() | | union = set() |
| for name in set_names: | | for name in set_names: |
| if name in sets: | | if name in sets: |
| union |= sets[name] | | union |= sets[name] |
| print(' '.join(sorted(union))) | | print(' '.join(sorted(union))) |
| elif tokens[0] == 'search': | | elif tokens[0] == 'search': |
| source_sets = tokens[1].split(',') | | source_sets = tokens[1].split(',') |
| union_source = set() | | union_source = set() |
| for name in source_sets: | | for name in source_sets: |
| if name in sets: | | if name in sets: |
| union_source |= sets[name] | | union_source |= sets[name] |
| if tokens[2] == 'where': | | if tokens[2] == 'where': |
| substring = tokens[3] | | substring = tokens[3] |
| to_index = tokens.index('to') | | to_index = tokens.index('to') |
| new_name = tokens[to_index + 1] | | new_name = tokens[to_index + 1] |
| new_set = {w for w in union_source if substring in w} | | new_set = {w for w in union_source if substring in w} |
| sets[new_name] = new_set | | sets[new_name] = new_set |
| elif tokens[2] == 'for': | | elif tokens[2] == 'for': |
| target_sets = tokens[3].split(',') | | target_sets = tokens[3].split(',') |
| union_target = set() | | union_target = set() |
| for name in target_sets: | | for name in target_sets: |
| if name in sets: | | if name in sets: |
| union_target |= sets[name] | | union_target |= sets[name] |
| to_index = tokens.index('to') | | to_index = tokens.index('to') |
| new_name = tokens[to_index + 1] | | new_name = tokens[to_index + 1] |
| new_set = union_source & union_target | | new_set = union_source & union_target |
| sets[new_name] = new_set | | sets[new_name] = new_set |