require 'fproduct.rb' module Enumerable def and each {|i| return false if not yield(i)} return true end def or each {|i| return true if yield(i)} false end end class Object def deep_clone Marshal::load(Marshal.dump(self)) end end class Array include EnumerableOperator alias top last def all_pairs a = size-1 for i,j in product(0..a, 0..a, proc {|i,j| i < j}) yield at(i), at(j) end end end