def power_cubic(n, m)
      if n < 1
	raise "cubic(< 1, m) called"
      elsif n == 1
	yield( (0...m).collect{0} )# point of origin
      else
	0.upto m do |dim|
	  Combinatorial.comb(m, dim) do |s|
	    power_cubic(n-1, dim) do |a|
	      yield inject(a, s.sort, m)
	    end
	  end
	end
      end
    end
def power_cubic(n, m)
      if n < 1
	raise "cubic(< 1, m) called"
      elsif n == 1
	yield( (0...m).collect{0} )# point of origin
      else
	0.upto m do |dim|
	  Combinatorial.comb(m, dim) do |s|
	    power_cubic(n-1, dim) do |a|
	      yield inject(a, s.sort, m)
	    end
	  end
	end
      end
    end
power in order of (point, eadges, surfaces, bodies, ..)