Two graphs which contain the same number of graph vertices connected in the same way are said to be isomorphic. Formally, two graphs G and H with graph vertices V_n = {1, 2, ..., n} are said to be isomorphic if there is a permutation p of V_n such that {u, v} is in the set of graph edges E(G) iff {p(u), p(v)} is in the set of graph edges E(H). Canonical labeling is a practically effective technique used for determining graph isomorphism. Several software implementations are available, including nauty (McKay), Traces, saucy, and bliss, where the latter two are aimed particularly at large sparse graphs.