// This program just determines the conspicuous sets of composition factors for PSp(4,9).


G2:=PSp(4,9);
CC:=ConjugacyClasses(G2);
load "Subgroups/functions.txt";
load "Subgroups/E8/ComputeFactorsE8.txt";
p:=3;
load "Traces/E8/Tr20E8Eigs";
load "Traces/E8/Tr41E8Eigs";
Tr20E8:={EigsToTracePowers(i,20):i in Tr20E8Eigs};
Tr41E8:={[&+i]:i in Tr41E8Eigs};

delete Tr20E8Eigs;
delete Tr41E8Eigs;


//Tr21:={[i[1]]:i in Tr21E8};
Tr:=<{[248]},Tr2E8,{},Tr4E8,Tr5E8,{},{},Tr8E8,{},Tr10E8,{},{},{},{},{},{},{},{},{},Tr20E8>;
lim:=#[i:i in [j[1]:j in CC]|i le #Tr];
phi:=PowerMap(G2);
CPM:=[[phi(j,i):i in Prune(Divisors(CC[j,1]))]:j in [1..lim]];

X:=OrderByDimension(CompositionFactors(PermutationModule(G2,GF(9))));
X:=StripDuplicates(OrderByDimension(CompositionFactors(PermutationModule(G2,GF(9))))); X:=Swap(X,1,2);
X,n:=GainSomeMoreModules(X,0,1); X:=OrderByDimension(X); X:=Swap(X,1,2);
X,n:=GainSomeMoreModules(X,0,1); X:=OrderByDimension(X);
S51:=X[2];
S101:=ExteriorSquare(S51);
S1:=X[1];
Irr:=[S1,S51];
Irr:=AppendWithoutDuplicates(Irr,CompositionFactors(Socle(SymmetricPower(S51,3))));
S52:=Irr[3];
S102:=ExteriorSquare(S52);
Append(~Irr,S101);
Append(~Irr,S102);
Irr:=AppendWithoutDuplicates(Irr,CompositionFactors(SymmetricSquare(S51)));
Irr:=AppendWithoutDuplicates(Irr,CompositionFactors(SymmetricSquare(S52)));
S141:=Irr[6];
S142:=Irr[7];
S16:=SocleFactors(SymmetricSquare(S101))[2];
Append(~Irr,S16);
Irr:=AppendWithoutDuplicates(Irr,CompositionFactors(ExteriorSquare(S101)));
Irr:=AppendWithoutDuplicates(Irr,CompositionFactors(ExteriorSquare(S102)));
S251:=Irr[9];
S252:=Irr[10];
S2512:=TensorProduct(S51,S52);
Append(~Irr,S2512);
Append(~Irr,TensorProduct(S51,S102));
Append(~Irr,TensorProduct(S52,S101));
S6412:=OrderByDimension(CompositionFactors(TensorProduct(S52,S16)))[2];
S6421:=OrderByDimension(CompositionFactors(TensorProduct(S51,S16)))[2];
Append(~Irr,S6412);
Append(~Irr,S6421);
S5012:=Irr[12];
S5021:=Irr[13];
Append(~Irr,TensorProduct(S51,S142));
Append(~Irr,TensorProduct(S52,S141));
S7012:=Irr[16];
S7021:=Irr[17];
Irr:=AppendWithoutDuplicates(Irr,CompositionFactors(ExteriorSquare(S141)));
Irr:=AppendWithoutDuplicates(Irr,CompositionFactors(ExteriorSquare(S142)));
S811:=Irr[18];
S812:=Irr[19];
Append(~Irr,TensorProduct(S101,S102));
S100:=Irr[20];
Append(~Irr,TensorProduct(S51,S252));
Append(~Irr,TensorProduct(S52,S251));
Append(~Irr,TensorProduct(S101,S142));
Append(~Irr,TensorProduct(S102,S141));
S12512:=Irr[21];
S12521:=Irr[22];
S14012:=Irr[23];
S14021:=Irr[24];
Append(~Irr,TensorProduct(S141,S142));
S196:=Irr[25];

Br:=[BrauerCharacter(i):i in Irr];
dims:=[Dimension(i):i in Irr];

AnsA:=RestrictedPartitions(248,{Dimension(i):i in Irr});
AnsB:=[i:i in AnsA|&+[Br[Position(dims,j),3]:j in i] in [24,-8]];
Ans:=[i:i in AnsB|25 in i or &+[Br[Position(dims,j),2]:j in i] in [24,-8]];
Ans2:=[];
for CurrentDegreeSeq in Ans do
  NewAns:=[];
  for j in SequenceToSet(CurrentDegreeSeq) do
    m:=[]; for k in [1..#dims] do if(dims[k] eq j) then Append(~m,k); end if; end for;
    n:=Multiplicity(SequenceToMultiset(CurrentDegreeSeq),j);
    // n:=0; for k in CurrentDegreeSeq do if(k eq j) then n+:=1; end if; end for;
    ThingsToAppend:=DecreasingSequences(n,m);
    if(NewAns eq []) then NewAns:=ThingsToAppend; delete ThingsToAppend;
    else
      NewAns2:=[];
      for alpha in NewAns do
        for beta in ThingsToAppend do Append(~NewAns2,alpha cat beta);
        end for;
      end for;
      delete NewAns; NewAns:=NewAns2; delete NewAns2; delete ThingsToAppend;
    end if;
  end for;
  Ans2 cat:=NewAns;
end for;

al:=65;
Ans3:=[];
for i in [1..#Ans2] do
  if (i mod 100000) eq 0 then i,#Ans2,#Ans3; end if;
  test:=&+[Br[k,al]:k in Ans2[i]];
  if([test] in Tr41E8) then Append(~Ans3,Ans2[i]); end if;
end for;

Ans4:=[];
for i in Ans3 do
  test:=[&+[Br[k,j]:k in i]:j in [1..lim]];
//  test:=&+[Br[k]:k in i];
  for j in [2..#CPM] do if(CC[j,1] le #Tr and GCD(CC[j,1],p) eq 1) then
    ord:=CC[j,1]; divs:=Prune(Divisors(ord));
    tt:=[test[k]:k in CPM[j]];
    if(not(tt in Tr[ord])) then continue i; end if;
    end if;
  end for;
  Append(~Ans4,i);
end for;

Ans4:=Sort([Sort(i):i in Ans4]);

Ans5:=[Ans4[i]:i in [1,3,4,6,7,10,11]];

Ans5 eq [
    [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4,
    4, 4, 4, 4, 6 ],
    [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3,
    3, 3, 4, 5, 8, 8, 8, 8, 8, 8, 8, 8, 11 ],
    [ 1, 2, 2, 2, 2, 2, 2, 3, 3, 6, 6, 6, 6, 6, 6, 8, 8, 8, 9, 9, 9 ],
    [ 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 6, 9, 9, 9, 9 ],
    [ 2, 4, 5, 5, 5, 10, 12, 14, 14 ],
    [ 4, 5, 6, 7, 12, 12, 13, 13 ],
    [ 4, 5, 12, 13, 14, 15 ]
];
