CSC 253: SML Homework Due Monday 3/5 A "directed graph" can be represented by a list of edges such as [(1,3), (3,4), (4,5)]. which represents a graph with edges from 1 to 3, 3 to 4 and 4 to 5. The "transitive closure" of such a graph G is defined to be the smallest graph T that contains G as a subgraph, and which stisfies the transitivity property: if (x,y) and (y,z) are in T then (x,z) is also in T. The transitive closure of the above graph would be [(1,3), (3,4), (4,5), (1,4), (1,5), (3,5)]. Your task is to write a function that computes the transitive closure of a given graph. This will involve finding instances of (x,y) and (y,z) in the graph and adding the edge (x,z) if it's not there already- be aware that a new edge may create more such instances. You should keep adding edges until no (x,y) and (y,z) are in the graph without (x,z). (Hint: you can design your program so that it will stop when no new edges are being added.) Additional Hint: to start, you might want to generate ALL possible pairs of edges like [((1,3),(3,4)), ((1,3),(4,5)) ...] Be careful: in the transitive closure of [(1,2),(2,1)], the "loop" edges (1,1) and (2,2) should be included (as per the definition).