Mam taki graf łączący wielkości fizyczne (`P; W; t; U; I; Q; R`) i wzory łączące te wielkości ze sobą: ``` graph fizyka { rankdir=LR; node [shape=circle, style=filled, fillcolor=lightblue]; P; W; t; U; I; Q; R; node [shape=box, style=filled, fillcolor=lightyellow]; w1 [label="W=P·t"]; w2 [label="P=U·I"]; w3 [label="Q=I·t"]; w4 [label="U=I·R"]; w5 [label="W=Q·U"]; P -- w1; t -- w1; w1 -- W; U -- w2; I -- w2; w2 -- P; I -- w3; t -- w3; w3 -- Q; I -- w4; R -- w4; w4 -- U; Q -- w5; U -- w5; w5 -- W; } ``` Każdy z tych wzorów przy dwu wielkościach danych potrafi wyliczyć trzecią. Napisz mi w Pythonie program, w którym ten graf będzie zapisany jako jakaś rozsądna struktura (lub kilka struktur). A potem chcę mieć funkcję, której podaję kilka wielkości danych i jedną szukaną (nie ich konkretne liczbowe wartości, ale same nazwy wielkości, na przykład że mamy dane `Q` oraz `t` a chcemy policzyć `I`) - i funkcja ma znaleźć najkrótszą drogę przez ten graf od danych do szukanych. Potem korzystając z tej funkcji napisz funkcję, która losuje `n` wielkości danych (`n` to parametr) i jedną wielkość szukaną (znowu, nie wartości liczbowe tylko nazwy wielkości) i znajduje najkrótszą drogę drogę. A potem używając tych funkcji napisz mi generator zadań z fizyki. Wszystkie zadania mają zaczynać sie tak samo, od słów "Do źródła stałego napięcia podłączono grzałkę. Płynie przez nią stały prąd.". Następnie program mówi losuje wielkości dane i szukaną, znajduje ścieżkę, potem losuje dla tych wielkości danych konkretne wartości liczbowe i mówi coś w stylu "Znamy ładunek, który przełynął przez grzałkę (120 C) oraz czas (10 s). Policz natężenie płynącego prądu (3 A)". Program ma również podać schemat rozwiązania - to znaczy ma powiedzieć, przez jakie wzory trzeba będzie przejść, żeby rozwiązać to zadanie. To znaczy coś w stylu: """ Krok 1: do wzoru "U = I * R" wstaw U oraz R, wylicz I. Krok 2: do wzoru "P = U * I" wstaw U oraz I, wstaw P. (...) """ i tak dalej.