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
