require 'set' a = [1, 2, 3, 4, 5, 6] r = Set.new( a.permutation.map{|p| Set.new( p.each_slice(2).map{|s| Set.new(s) } ) } ) r.each { |s| p s.map(&:to_a) }
Standard input is empty
[[1, 2], [3, 4], [5, 6]] [[1, 2], [3, 5], [4, 6]] [[1, 2], [3, 6], [4, 5]] [[1, 3], [2, 4], [5, 6]] [[1, 3], [2, 5], [4, 6]] [[1, 3], [2, 6], [4, 5]] [[1, 4], [2, 3], [5, 6]] [[1, 4], [2, 5], [3, 6]] [[1, 4], [2, 6], [3, 5]] [[1, 5], [2, 3], [4, 6]] [[1, 5], [2, 4], [3, 6]] [[1, 5], [2, 6], [3, 4]] [[1, 6], [2, 3], [4, 5]] [[1, 6], [2, 4], [3, 5]] [[1, 6], [2, 5], [3, 4]]