function B=mouter(varargin)
% mouter - Multidimensional outer product of multiple arrays
% Index domain of result is the concatenation of the index domains
% of the arguments, (with trailing 1s removed).
%
% mouter :: [Size1->A], [Size2->A] -> [[Size1,Size2]->A].
% mouter :: [Size1->A], [Size2->A], [Size3->A] -> [[Size1,Size2,Size3]->A].
% etc.
B=1;
for i=1:length(varargin)
	B=kron(varargin{i},B);
end
B=reshape(B,cell2mat(cellmap(@size1,varargin)));

