La tua formula non mi convince.
Metti che hai 3 sottogruppi ognuna composta da una coppia. Con la tua formula avrei 1*1*1 = 1 quindi non va. Le possibili permutazioni sonodel range di 5! * 144 = 125 * 144. bisogna vedere come intendi metterli tutti sti dati. un idea sarebbe quella di creare una struct definita così:
struct coppia
{
int primo;
int secondo;
};
poi creare un vettore di coppie ed infine creare un vettore di questi vettori.
con la funzione next_permutation
http://www.cplusplus.com/reference/algorithm/next_permutation/ riesci ad ottenere tutte le combinazioni possibili.
quindi i vettori saranno del tipo:
std::vector<coppia> vettore_riga;
std::vector<std::vector<coppia> > vettore_complessivo;
Ovviamente questo è solo uno spunto. A te il resto.