#!/usr/bin/python3 from collections import deque # přidej do fronty vzorce, ve kterých se vyskytuje daná veličina def pridej_vzorce_do_fronty(vzorce_s_velicinou, velicina, fronta): if velicina in vzorce_s_velicinou: for vzorec in vzorce_s_velicinou[velicina]: fronta.append(vzorec) pocet_zadanych_velicin, pocet_vzorcu, hledana_velicina = input().split() pocet_zadanych_velicin = int(pocet_zadanych_velicin) pocet_vzorcu = int(pocet_vzorcu) # množinová struktura všech veličin, které známe nebo umíme spočítat zname_veliciny = set(input().split()) # fronta se vzorci obsahující nově spočítané veličiny na_zpracovani = deque() # ke každé veličině si pamatujeme seznam vzorců, ve kterých se vyskytuje vzorce_s_velicinou = {} for _ in range(pocet_vzorcu): # načtení vzorců text_vzorce = input() a, _, b, _, c = text_vzorce.split() # na rovnítku a operaci nezáleží vzorec = (a, b, c, text_vzorce) # přidáme vzorec do seznamu pro veličiny b, c # pokud b == c, zapamatujeme si vzorec dvakrát, ale to nevadí vzorce_s_velicinou.setdefault(b, []).append(vzorec) vzorce_s_velicinou.setdefault(c, []).append(vzorec) # naplníme frontu vzorci se zadanými veličinami for a in zname_veliciny: pridej_vzorce_do_fronty(vzorce_s_velicinou, a, na_zpracovani) # frontu zpracováváme while len(na_zpracovani) > 0: a, b, c, text_vzorce = na_zpracovani.popleft() # veličinu jsme stihli spočítat jiným vzorcem, který byl ve frontě dříve if a in zname_veliciny: continue # veličinu umíme nově spočítat if b in zname_veliciny and c in zname_veliciny: zname_veliciny.add(a) print(text_vzorce) # vypíšeme použitý vzorec if a == hledana_velicina: break # přidáme do fronty vzorce s nově spočítanou veličinou pridej_vzorce_do_fronty(vzorce_s_velicinou, a, na_zpracovani)