Todas las combinaciones posibles de una matriz 2D [duplicado]

Esta pregunta ya tiene una respuesta aquí:

Generando todas las combinaciones posibles 11 respuestas

Quiero generar todas las combinaciones posibles de una matriz 2D [m x n] excepto el primer elemento de cada matriz. Ese elemento representará el 'tipo' que significa el resto de elementos. Por ejemplo, si tengo una matriz

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

El resultado deseado debe ser la combinación de todas las posibilidades de la camisa. Para el ejemplo anterior,

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

Probé algo como esto (también tomé la ayuda de otros Stack OverflowPregunta )

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;
}

pero da valores de TODAS las combinaciones n solo es decir,

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

No tiene en cuenta las combinaciones más pequeñas y ni siquiera es genérico, es decir, para una matriz [m x n] (no es necesario que n sea fijo). Una ayuda en VBA sería muy apreciada. Estoy cómodo con C, Java y C #. Gracias por adelantado :)

Editar:

Esto es diferente a lapregunta hecha aquí. Este no es un producto cartesiano en el queuno El elemento se tomará de cada matriz en cuestión. La salida que requiero no pone esta restricción; de ahí el número de combinaciones en este escenario> número de combinaciones en la pregunta vinculada. Además, la primera columna es un descriptor de los contenidos y debe acompañar el contenido.

Respuestas a la pregunta(3)

Su respuesta a la pregunta