##ConnectedComponents Using [Daniel Lichtblau's answer](https://mathematica.stackexchange.com/a/6184/125) to a [related question ](https://mathematica.stackexchange.com/q/6183/125) ConnectedComponents[pairs] //Sort /@ # & //Sort (* thanks: CarlWoll *) > {{3, 5, 9}, {11, 21, 22, 35}, {12, 14, 16, 23}, {1, 6, 10, 13, 36}, {17, 20, 24, 25, 28, 32}, {2, 8, 15, 18, 27, 29, 31}, {4, 7, 19, 26, 30, 33, 34}} In versions prior to 10.3 use ConnectedComponents[Graph[UndirectedEdge @@@ pairs]] //Sort /@ # & //Sort ##MatrixPower Implementing transitive closure using `MatrixPower`: m = Max@pairs; (*the adjacency matrix of atomic elements in pairs:*) SparseArray[pairs ~Append~ {i_, i_} -> 1, {m, m}]; (*symmetrize the adjacency matrix:*) % + %\[Transpose] // Sign; (*find the transitive closure:*) Sign @ MatrixPower[N@%, m]; (*eliminate duplicate rows,and extract the atomic elements of pairs in each row:*) Select[DeleteDuplicates @ Normal @ %, Tr@# > 1 &]; Join @@ Position[#, 1] & /@ %; (*organize:*) Sort[Sort /@ %] > {{3, 5, 9}, {11, 21, 22, 35}, {12, 14, 16, 23}, {1, 6, 10, 13, 36}, {17, 20, 24, 25, 28, 32}, {2, 8, 15, 18, 27, 29, 31}, {4, 7, 19, 26, 30, 33, 34}}