Todas as combinações possíveis de um array 2D [duplicado]

Esta questão já tem uma resposta aqui:

Gerando todas as combinações possíveis 11 respostas

Eu quero gerar todas as combinações possíveis a partir de uma matriz 2D [m x n], exceto para o primeiro elemento de cada matriz. Esse elemento representará o 'tipo' significando os elementos de descanso. Por exemplo, se eu tiver uma matriz

shirts[][] = 
{
  {"colour", "red", "blue", "green", "yellow"},
  {"cloth", "cotton", "poly", "silk"},
  {"type", "full", "half"}
};

A saída desejada deve ser uma combinação de todas as possibilidades de camisa. Para o exemplo acima,

colour red
colour blue
...
cloth silk
type full
type half
colour red cloth cotton
colour red cloth poly
...
colour yellow type half
cloth cotton type full
...
cloth silk type half
colour red cloth cotton type full
...
colour yellow cloth silk type half

Eu tentei algo assim (também recebi ajuda de outro Stack OverflowQuestão )

String shirts[][] = 
{
  {"colour", "red", "blue", "green", "yellow"},
  {"cloth", "cotton", "poly", "silk"},
  {"type", "full", "half"}
};

majorCombinations = new int[possibilities][shirts.length];

int currentCombination;
int offset = 1;

for (int i=0; i < shirts.length; i++)
{
    currentCombination = 0;
    while (currentCombination < possibilities)
    {
        for (int j=0; j < shirts[i].length; j++)
        {
            for (int k=0; k < offset; k++)
            {
                if (currentCombination < possibilities)
                {
                    majorCombinations[currentCombination][i] = shirts[i][j];
                    currentCombination++;
                }
            }
        }
    }
    offset *= shirts[i].length;
}

mas dá valores de TODAS as combinações n, ou seja,

colour cloth type
colour cloth full
...
yellow silk half

Não leva em conta combinações menores e nem é genérico, ou seja, para um array [m x n] (n não precisa ser corrigido). Uma ajuda no VBA seria muito apreciada. Estou confortável com C, Java e C #. Desde já, obrigado :)

Editar:

Isso é diferente do quepergunta feita aqui. Este não é um produto cartesiano em que1 elemento pode ser retirado de cada array em questão. A saída que eu exijo não coloca essa restrição; daí o número de combinações neste cenário> número de combinações na questão vinculada. Além disso, a primeira coluna é um descritor do conteúdo e deve acompanhar o conteúdo.

questionAnswers(3)

yourAnswerToTheQuestion