class Array
def flatten(levels=-1)
levels>0?self.inject([]){|m,e|e===(Array)?e.flatten(levels-1).map{|x|m<<x}:m<<e;m}:
levels==0?self:(e=self;e=e.flatten(1)until !e.any?{|x|x===Array};e)
end
end