Question: Pairing of elements of two lists


Given two lists I and J of the same size, how can we find all perfect mathings of two lists? 

In other way, how can we find all pairing of elements of I and J? 

For exapmle, given I = [1,2,3] and J = [4,5,6], i would like to get 

[[1,4],[2,5],[3,6]], [[1,4], [2,6],[3,5]], [[1,5],[2,4],[3,6]], [[1,5],[2,6],[3,4]], [[1,6],[2,4],[3,5]], [[1,6],[2,5],[3,4]]

I can see how I can use the permutation of one list and match component-wise in order will do it, but would there be more efficient way to complete  the task? 

Ultimately, I would like do this for a list of lists, that is, for example,

I = [[3,5],[6,7,9,12]] and J = [[8,10], [1,2,4,11]] then I would like to get 

[[3,8],[5,10],[6,1],[7,2],[9,4],[12,11]] and by the above example, get 24 of product of disjoint cycles like such.


Please Wait...