//Gram := HermitianTranspose(V[1])*V[1]; getFlags := function(Gram, n) Pflag := [1..n]; oneproducts := true; twoproducts := true; threeproducts := true; baseflag := [1..n]; kflags := { baseflag }; for k in [1..n] do oldflags := kflags; kflags := {}; for flag in oldflags do for l in [k..n] do possible := true; newflag := flag; newflag[k] := flag[l]; newflag[l] := flag[k]; if oneproducts then difference := Gram[k,k] - Gram[newflag[k], newflag[k]]; if difference ne 0 then continue l; end if; end if; if twoproducts then for s in [1..k-1] do difference := Gram[s,k]*Gram[k,s] - Gram[newflag[s],newflag[k]]*Gram[newflag[k], newflag[s]]; if difference ne 0 then continue l; end if; end for; end if; if threeproducts then for s in [1..k-1] do for t in [s+1..k-1] do difference:= Gram[s,t]*Gram[t,k]*Gram[k,s] - Gram[newflag[s],newflag[t]]*Gram[newflag[t],newflag[k]]*Gram[newflag[k],newflag[s]]; if difference ne 0 then continue l; end if; end for; end for; end if; kflags := kflags join {newflag}; end for; end for; print k, #kflags; end for; return kflags; end function; //Identify(kGroup);