Quelle vals28.gi
Sprache: unbekannt
|
|
BindGlobal( "ValsPreFunction28", function(P, case)
local W, F, SQ, i, CU, x, y, z, t, u, v, k, ii,
transversal3, sofar, transversal4, transversal5, transversal6, params,
xrange, yrange, zrange, urange, vrange, mats, y5, y6, y3, y4, A, y1, y2,
a, b, c, m, B, D, C, z3, z4, z5, z6, z1, z2, new, index, ind1, AS, stab1,
stab2, half, bcrange, sol, expect, val, B1, C1, B2, C2, BB1, BB2, lns,
x1, u1, range, k2, km2, wover2, bc, s, A1, A2, AS1, AS2;
W:=PrimitiveRootMod(P);
F:=GF(P);
SQ:=Set(List([1..(P-1)/2], X -> (X^2) mod P));
for i in [2..P-1] do
if not i in SQ then lns:=i; break; fi;
od;
CU:=[1];
for x in [2..P-1] do
if (x^3) mod P = 1 then AddSet(CU,x); fi;
od;
##If p=1 mod 3 compute a transversal for the cube roots of 1
transversal3:=[];
if P mod 3 = 1 then
transversal3:=[];
sofar:=[];
for i in [1..P-1] do
if i^3 mod P in sofar then continue; fi;
Add(transversal3,i);
AddSet(sofar,i^3 mod P);
od;
fi;
##If p=1 mod 4 then compute a transversal for the fourth roots of 1
transversal4:=[];
if P mod 4 = 1 then
sofar:=[];
for i in [1..(P-1)/2] do
if i^4 mod P in sofar then continue; fi;
Add(transversal4,i);
AddSet(sofar,i^4 mod P);
od;
fi;
##If p=1 mod 5 then compute a transversal for the fifth roots of 1
transversal5:=[];
if P mod 5 = 1 then
sofar:=[];
for i in [1..P-1] do
if i^5 mod P in sofar then continue; fi;
Add(transversal5,i);
AddSet(sofar,i^5 mod P);
od;
fi;
##If p=1 mod 3 then compute a transversal for the sixth roots of 1
transversal6:=[];
if P mod 3 = 1 then
sofar:=[];
for i in [1..P-1] do
if i^6 mod P in sofar then continue; fi;
Add(transversal6,i);
AddSet(sofar,i^6 mod P);
od;
fi;
params := List([1..24], x -> []);
##Case 1: cb=caa=cab=cac=0
if case = true or case = 1 then
Add(params[1],[0,0,0,0,0,0]);
Add(params[1],[1,0,0,0,0,0]);
Add(params[1],[0,1,0,0,0,0]);
Add(params[1],[0,W,0,0,0,0]);
Add(params[1],[0,0,1,0,0,0]);
Add(params[1],[0,0,W,0,0,0]);
Add(params[1],[0,1,1,0,0,0]);
Add(params[1],[0,1,W,0,0,0]);
Add(params[1],[0,W,1,0,0,0]);
Add(params[1],[0,W,W,0,0,0]);
for y in [0..P-1] do
Add(params[1],[1,y,1,0,0,0]);
Add(params[1],[1,y,W,0,0,0]);
od;
Add(params[1],[1,1,0,1,0,0]);
Add(params[1],[1,W,0,1,0,0]);
for x in [0..P-1] do
Add(params[1],[x,0,0,1,0,0]);
od;
Add(params[1],[0,0,0,0,1,0]);
Add(params[1],[0,1,0,0,1,0]);
Add(params[1],[0,W,0,0,1,0]);
Add(params[1],[0,0,0,1,1,0]);
Add(params[1],[0,1,0,1,1,0]);
Add(params[1],[0,W,0,1,1,0]);
Add(params[1],[1,0,0,0,0,1]);
Add(params[1],[0,0,0,0,0,1]);
Add(params[1],[0,0,1,0,0,1]);
Add(params[1],[0,0,W,0,0,1]);
if Length(params[1]) <> 3*P+22 then Error("params[1] wrong"); fi;
if case = 1 then return params[1]; fi;
fi;
##Case 2: caa=cab=cac=0, cb=baa
if case = true or case = 2 then
Add(params[2],[0,0,0,0,0,0]);
Add(params[2],[1,0,0,0,0,0]);
Add(params[2],[0,1,0,0,0,0]);
Add(params[2],[0,W,0,0,0,0]);
Add(params[2],[0,0,1,0,0,0]);
Add(params[2],[0,0,W,0,0,0]);
Add(params[2],[0,1,1,0,0,0]);
Add(params[2],[0,1,W,0,0,0]);
Add(params[2],[0,W,1,0,0,0]);
Add(params[2],[0,W,W,0,0,0]);
for y in [0..P-1] do
Add(params[2],[1,y,1,0,0,0]);
Add(params[2],[1,y,W,0,0,0]);
od;
Add(params[2],[1,1,0,1,0,0]);
Add(params[2],[1,W,0,1,0,0]);
for x in [0..P-1] do
Add(params[2],[x,0,0,1,0,0]);
od;
for x in [0..P-1] do
Add(params[2],[0,x,0,0,1,0]);
Add(params[2],[0,x,0,1,1,0]);
od;
Add(params[2],[0,0,0,0,0,1]);
Add(params[2],[1,0,0,0,0,1]);
if P mod 3 = 1 then
Add(params[2],[W,0,0,0,0,1]);
Add(params[2],[W^2 mod P,0,0,0,0,1]);
fi;
Add(params[2],[0,0,1,0,0,1]);
Add(params[2],[0,0,W,0,0,1]);
if P mod 4 = 1 then
Add(params[2],[0,0,W^2 mod P,0,0,1]);
Add(params[2],[0,0,W^3 mod P,0,0,1]);
fi;
if Length(params[2])<>5*P+13+Gcd(P-1,3)+Gcd(P-1,4)
then Error("params[2] wrong"); fi;
if case = 2 then return params[2]; fi;
fi;
##Case 3: cb=bab=bac=cac=0
if case = true or case = 3 then
Add(params[3],[0,0,0,0,0,0]);
Add(params[3],[1,0,0,0,0,0]);
Add(params[3],[0,0,0,0,1,0]);
Add(params[3],[0,1,0,0,1,0]);
Add(params[3],[0,0,0,0,1,1]);
Add(params[3],[1,0,0,0,1,1]);
Add(params[3],[0,0,0,0,1,W]);
Add(params[3],[1,0,0,0,1,W]);
Add(params[3],[0,0,1,0,0,1]);
Add(params[3],[0,0,W,0,0,W]);
for i in [1..P-1] do
Add(params[3],[0,0,0,i,1,1]);
Add(params[3],[0,0,0,i,1,W]);
od;
Add(params[3],[0,0,0,1,1,0]);
Add(params[3],[0,0,0,W,1,0]);
if P mod 4 = 1 then
Add(params[3],[0,0,0,W^2 mod P,1,0]);
Add(params[3],[0,0,0,W^3 mod P,1,0]);
fi;
if Length(params[3]) <> 2*P+8+Gcd(P-1,4) then Error("params[3] wrong"); fi;
if case = 3 then return params[3]; fi;
fi;
##Case 4: bab=bac=cac=0, cb=baa
if case = true or case = 4 then
Add(params[4],[0,0,0,0,0,0]);
Add(params[4],[1,0,0,0,0,0]);
Add(params[4],[0,1,0,0,0,0]);
if P mod 3 = 1 then
Add(params[4],[0,W,0,0,0,0]);
Add(params[4],[0,W^2 mod P,0,0,0,0]);
fi;
Add(params[4],[0,0,0,0,1,0]);
Add(params[4],[0,1,0,0,1,0]);
if P mod 3 = 1 then
Add(params[4],[0,W,0,0,1,0]);
Add(params[4],[0,W^2 mod P,0,0,1,0]);
fi;
Add(params[4],[0,0,0,0,0,1]);
Add(params[4],[1,0,0,0,0,1]);
Add(params[4],[0,0,0,0,0,W]);
Add(params[4],[1,0,0,0,0,W]);
for y in [0..P-1] do
Add(params[4],[0,0,1,0,0,y]);
Add(params[4],[0,0,W,0,0,y]);
od;
Add(params[4],[0,0,1,0,1,1]);
Add(params[4],[0,0,W,0,1,W]);
for z in [1..(P-1)/2] do
Add(params[4],[0,z,1,0,0,0]);
Add(params[4],[0,z,W,0,0,0]);
od;
Add(params[4],[0,0,0,1,0,0]);
Add(params[4],[1,0,0,1,0,0]);
if P mod 5 = 1 then
Add(params[4],[W,0,0,1,0,0]);
Add(params[4],[W^2 mod P,0,0,1,0,0]);
Add(params[4],[W^3 mod P,0,0,1,0,0]);
Add(params[4],[W^4 mod P,0,0,1,0,0]);
fi;
Add(params[4],[0,0,0,1,1,0]);
Add(params[4],[0,0,0,1,W,0]);
if P mod 4 = 1 then
Add(params[4],[0,0,0,1,W^2 mod P,0]);
Add(params[4],[0,0,0,1,W^3 mod P,0]);
fi;
for x in [0..P-1] do
Add(params[4],[0,0,0,1,x,1]);
Add(params[4],[0,0,0,1,x,W]);
od;
for z in [1..(P-1)/2] do
Add(params[4],[z,0,0,1,0,1]);
Add(params[4],[z,0,0,1,0,W]);
od;
if Length(params[4]) <> 6*P+8+2*Gcd(P-1,3)+Gcd(P-1,4)+Gcd(P-1,5) then
Error("params[4] wrong");
fi;
if case = 4 then return params[4]; fi;
fi;
##Case 5: cb=bac=cac=0, caa=bab
if case = true or case = 5 then
Add(params[5],[0,0,0,0,0,0]);
Add(params[5],[1,0,0,0,0,0]);
Add(params[5],[0,1,0,0,0,0]);
Add(params[5],[0,W,0,0,0,0]);
Add(params[5],[0,0,1,0,0,0]);
Add(params[5],[0,0,W,0,0,0]);
Add(params[5],[0,1,1,0,0,0]);
Add(params[5],[0,1,W,0,0,0]);
Add(params[5],[0,W,1,0,0,0]);
Add(params[5],[0,W,W,0,0,0]);
for x in [0..P-1] do
Add(params[5],[x,0,0,1,0,0]);
od;
Add(params[5],[0,0,0,0,1,0]);
Add(params[5],[0,1,0,0,1,0]);
Add(params[5],[0,W,0,0,1,0]);
if P mod 3 = 1 then
Add(params[5],[0,W^2 mod P,0,0,1,0]);
Add(params[5],[0,W^3 mod P,0,0,1,0]);
Add(params[5],[0,W^4 mod P,0,0,1,0]);
Add(params[5],[0,W^5 mod P,0,0,1,0]);
fi;
if P mod 4 = 1 then
for x in [0..(P-1)/2] do
Add(params[5],[0,x,0,1,1,0]);
Add(params[5],[0,x,0,W,1,0]);
Add(params[5],[0,x,0,W^2 mod P,1,0]);
Add(params[5],[0,x,0,W^3 mod P,1,0]);
od;
fi;
if P mod 4 = 3 then
for x in [0..P-1] do
Add(params[5],[0,x,0,1,1,0]);
Add(params[5],[0,x,0,W,1,0]);
od;
fi;
for x in [0..P-1] do
Add(params[5],[0,0,x,0,0,1]);
Add(params[5],[0,0,x,0,0,W]);
od;
Add(params[5],[1,0,0,0,0,1]);
Add(params[5],[1,0,0,0,0,W]);
Add(params[5],[1,0,1,0,0,1]);
Add(params[5],[1,0,W,0,0,W]);
if Length(params[5]) <> 5*P+13+2*Gcd(P-1,3)+Gcd(P-1,4) then
Error("params[5] wrong");
fi;
if case = 5 then return params[5]; fi;
fi;
##Case 6: bac=cac=0, caa=bab, cb=baa
if case = true or case = 6 then
Add(params[6],[0,0,0,0,0,0]);
Add(params[6],[1,0,0,0,0,0]);
if P mod 5 = 1 then
Add(params[6],[W,0,0,0,0,0]);
Add(params[6],[W^2 mod P,0,0,0,0,0]);
Add(params[6],[W^3 mod P,0,0,0,0,0]);
Add(params[6],[W^4 mod P,0,0,0,0,0]);
fi;
Add(params[6],[0,1,0,0,0,0]);
Add(params[6],[0,W,0,0,0,0]);
if P mod 3 = 1 then
Add(params[6],[0,W^2 mod P,0,0,0,0]);
Add(params[6],[0,W^3 mod P,0,0,0,0]);
Add(params[6],[0,W^4 mod P,0,0,0,0]);
Add(params[6],[0,W^5 mod P,0,0,0,0]);
fi;
if P mod 4 = 3 then
for x in [0..P-1] do
Add(params[6],[0,x,1,0,0,0]);
Add(params[6],[0,x,W,0,0,0]);
od;
fi;
if P mod 4 = 1 then
for x in [0..(P-1)/2] do
Add(params[6],[0,x,1,0,0,0]);
Add(params[6],[0,x,W,0,0,0]);
Add(params[6],[0,x,W^2 mod P,0,0,0]);
Add(params[6],[0,x,W^3 mod P,0,0,0]);
od;
fi;
for x in [0..P-1] do
Add(params[6],[x,0,0,1,0,0]);
if P mod 5 = 1 then
Add(params[6],[x,0,0,W,0,0]);
Add(params[6],[x,0,0,W^2 mod P,0,0]);
Add(params[6],[x,0,0,W^3 mod P,0,0]);
Add(params[6],[x,0,0,W^4 mod P,0,0]);
fi;
od;
if P mod 3 = 2 then
for x in [0..P-1] do
for y in [0..P-1] do
Add(params[6],[0,y,0,x,1,0]);
od;
od;
fi;
if P mod 3 = 1 then
xrange:=ShallowCopy(transversal3);
Add(xrange,0);
for x in xrange do
for y in [0..P-1] do
Add(params[6],[0,y,0,x,1,0]);
Add(params[6],[0,y,0,x,W,0]);
Add(params[6],[0,y,0,x,W^2 mod P,0]);
od;
od;
fi;
if P mod 4 = 3 then
for y in [0..(P-1)/2] do
Add(params[6],[y,0,0,0,0,1]);
Add(params[6],[y,0,0,0,0,W]);
od;
for x in [1..P-1] do
Add(params[6],[0,0,x,0,0,1]);
Add(params[6],[0,0,x,0,0,W]);
od;
for y in [1..(P-1)/2] do
Add(params[6],[y,0,1,0,0,1]);
Add(params[6],[y,0,W,0,0,W]);
od;
fi;
if P mod 4 = 1 then
yrange:=ShallowCopy(transversal4);
Add(yrange,0);
for y in yrange do
Add(params[6],[y,0,0,0,0,1]);
Add(params[6],[y,0,0,0,0,W]);
Add(params[6],[y,0,0,0,0,W^2 mod P]);
Add(params[6],[y,0,0,0,0,W^3 mod P]);
od;
for x in [1..P-1] do
Add(params[6],[0,0,x,0,0,1]);
Add(params[6],[0,0,x,0,0,W]);
Add(params[6],[0,0,x,0,0,W^2 mod P]);
Add(params[6],[0,0,x,0,0,W^3 mod P]);
od;
for y in transversal4 do
Add(params[6],[y,0,1,0,0,1]);
Add(params[6],[y,0,W,0,0,W]);
Add(params[6],[y,0,W^2 mod P,0,0,W^2 mod P]);
Add(params[6],[y,0,W^3 mod P,0,0,W^3 mod P]);
od;
fi;
if Length(params[6])<>P^2+3*P-3+(P+2)*Gcd(P-1,3)+(P+1)*Gcd(P-1,4)+(P+1)*Gcd(P-1,5)
then
Error("params[6] wrong");
fi;
if case = 6 then return params[6]; fi;
fi;
##Case 7: cb=baa=bac=cac=0
if case = true or case = 7 then
for u in [0,1,W] do
for t in [0,1] do
for x in [0,1] do
Add(params[7],[u,0,t,x,0,0]);
od;
od;
od;
for u in [0,1,W] do
for x in [0,1] do
Add(params[7],[u,1,0,x,0,0]);
od;
od;
for x in [0,1,W] do
Add(params[7],[0,1,1,x,0,0]);
od;
for u in [1,W] do
for x in [0..P-1] do
Add(params[7],[u,1,1,x,0,0]);
od;
od;
for u in [0,1,W] do
for x in [0,1] do
for z in [1,W] do
Add(params[7],[u,0,0,x,0,z]);
od;
od;
od;
for u in [0..P-1] do
for x in [0,1] do
for z in [1,W] do
Add(params[7],[u,0,1,x,0,z]);
od;
od;
od;
for v in [0,1,W] do
for z in [0,1,W] do
Add(params[7],[0,v,0,0,1,z]);
od;
od;
vrange:=[0,1,W];
if P mod 4 = 1 then vrange:=[0,1,W,W^2 mod P,W^3 mod P]; fi;
for v in vrange do
Add(params[7],[0,v,0,1,1,0]);
od;
for v in [0..P-1] do
for z in [1,W] do
Add(params[7],[0,v,0,1,1,z]);
od;
od;
for v in [0..P-1] do
for z in [0,1,W] do
Add(params[7],[0,v,1,0,1,z]);
od;
od;
for v in [0..P-1] do
for x in [1,W] do
for z in [0..P-1] do
Add(params[7],[0,v,1,x,1,z]);
od;
od;
od;
if Length(params[7]) <> 2*P^2+11*P+43+Gcd(P-1,4) then Error("params[7] wrong"); fi;
if case = 7 then return params[7]; fi;
fi;
##Case 8: cb=caa, baa=bac=cac=0
if case = true or case = 8 then
urange:=[0,1,W];
if P mod 4 = 1 then urange:=[0,1,W,W^2 mod P,W^3 mod P]; fi;
for u in urange do
Add(params[8],[u,0,0,0,0,0]);
Add(params[8],[u,0,0,1,0,0]);
Add(params[8],[u,1,0,0,0,0]);
od;
if P mod 3 = 1 then
urange:=ShallowCopy(transversal3);
Add(urange,0);
else;
urange:=[0..P-1];
fi;
for u in urange do
Add(params[8],[u,0,1,0,0,0]);
Add(params[8],[u,0,1,1,0,0]);
Add(params[8],[u,1,1,0,0,0]);
if P mod 3 = 1 then
Add(params[8],[u,0,W,0,0,0]);
Add(params[8],[u,0,W,1,0,0]);
Add(params[8],[u,1,W,0,0,0]);
Add(params[8],[u,0,W^2 mod P,0,0,0]);
Add(params[8],[u,0,W^2 mod P,1,0,0]);
Add(params[8],[u,1,W^2 mod P,0,0,0]);
fi;
od;
for u in [0..P-1] do
for t in [0..P-1] do
Add(params[8],[u,1,t,1,0,0]);
od;
od;
for u in [0..P-1] do
for t in [0..(P-1)/2] do
for x in [0,1] do
for z in [1,W] do
Add(params[8],[u,0,t,x,0,z]);
od;
od;
od;
od;
vrange:=[0,1,W];
if P mod 3 = 1 then vrange:=[0,1,W,W^2,W^3,W^4,W^5] mod P; fi;
for v in vrange do
Add(params[8],[0,v,0,0,1,0]);
od;
if P mod 5 <> 1 then
for v in [0..P-1] do
Add(params[8],[0,v,0,1,1,0]);
od;
fi;
if P mod 5 = 1 then
vrange:=ShallowCopy(transversal5);
Add(vrange,0);
for v in vrange do
for x in ([1,W,W^2,W^3,W^4] mod P) do
Add(params[8],[0,v,0,x,1,0]);
od;
od;
fi;
if P mod 3 = 2 then
for v in [0..P-1] do
for x in [0..P-1] do
Add(params[8],[0,v,1,x,1,0]);
od;
od;
fi;
if P mod 3 = 1 then
xrange:=ShallowCopy(transversal3);
Add(xrange,0);
for v in [0..P-1] do
for x in xrange do
Add(params[8],[0,v,1,x,1,0]);
Add(params[8],[0,v,W,x,1,0]);
Add(params[8],[0,v,W^2 mod P,x,1,0]);
od;
od;
fi;
for v in [0..P-1] do
for x in [0..(P-1)/2] do
for z in [1,W] do
Add(params[8],[0,v,0,x,1,z]);
od;
od;
od;
for v in [0..P-1] do
for t in [1..(P-1)/2] do
for x in [0..P-1] do
for z in [1,W] do
Add(params[8],[0,v,t,x,1,z]);
od;
od;
od;
od;
if Length(params[8]) <> P^3+4*P^2+6*P+(P+5)*Gcd(P-1,3)+3*Gcd(P-1,4)+Gcd(P-1,5)
then Error("params[8] wrong"); fi;
if case = 8 then return params[8]; fi;
fi;
#Cases 9 & 10: cb=bac=caa=0, cac=kbab (k=1,W)
if case = true or case = 9 or case = 10 then
Add(params[9],[0,0,0,0,0,0]);
Add(params[9],[1,0,0,0,0,0]);
Add(params[9],[0,1,0,0,0,0]);
Add(params[9],[0,W,0,0,0,0]);
for y in [0,1,W] do
Add(params[9],[0,y,0,0,1,0]);
if P mod 4 = 1 then
Add(params[9],[0,y,0,0,W,0]);
fi;
od;
yrange:=[0..P-1];
if P mod 4 = 1 then yrange:=[0..(P-1)/2]; fi;
for y in yrange do
Add(params[9],[1,y,0,0,1,0]);
if P mod 4 = 1 then
Add(params[9],[1,y,0,0,W,0]);
fi;
od;
for x in [0..(P-1)/2] do
Add(params[9],[x,0,0,0,0,1]);
od;
Add(params[9],[0,1,0,0,0,1]);
Add(params[9],[0,W,0,0,0,1]);
for y in [0,1,W] do
for z in [0..(P-1)/2] do
Add(params[9],[0,y,1,0,z,0]);
Add(params[9],[0,y,W,0,z,0]);
od;
od;
for y in [0..P-1] do
for z in [0..(P-1)/2] do
Add(params[9],[0,y,1,0,z,1]);
Add(params[9],[0,y,W,0,z,1]);
od;
od;
for y in [0..P-1] do
for t in [0..(P-1)/2] do
Add(params[9],[1,y,1,0,0,t]);
Add(params[9],[1,y,W,0,0,t]);
od;
od;
for y in [0..P-1] do
for z in [1..(P-1)/2] do
for t in [0..P-1] do
Add(params[9],[1,y,1,0,z,t]);
Add(params[9],[1,y,W,0,z,t]);
od;
od;
od;
for x in [0..(P-1)/2] do
for y in [0..P-1] do
Add(params[9],[y,0,0,1,0,x]);
od;
od;
for x in [0..(P-1)/2] do
Add(params[9],[1,1,0,1,0,x]);
Add(params[9],[1,W,0,1,0,x]);
od;
if P mod 4 = 1 then
for x in [0..P-1] do
for y in [0..(P-1)/2] do
Add(params[9],[x,y,0,1,1,0]);
Add(params[9],[x,y,0,1,W,0]);
od;
od;
fi;
if P mod 4 = 3 then
for x in [0..P-1] do
for y in [0..P-1] do
Add(params[9],[x,y,0,1,1,0]);
od;
od;
fi;
if Length(params[9]) <> P^3+5*P^2/2+7*P+19/2+(P+4)*Gcd(P-1,4)/2
then Error("params[9] wrong"); fi;
if case = 9 then return params[9]; fi;
if case = 10 then return params[9]; fi;
if case = true then params[10] := params[9]; fi;
fi;
##Cases 11 & 12: bac=caa=0, cb=baa, cac=kbab (k=1,W)
if case = true or case = 11 or case = 12 then
Add(params[11],[0,0,0,0,0,0]);
Add(params[11],[1,0,0,0,0,0]);
if P mod 3 = 1 then
Add(params[11],[W,0,0,0,0,0]);
Add(params[11],[W^2 mod P,0,0,0,0,0]);
fi;
Add(params[11],[0,1,0,0,0,0]);
Add(params[11],[0,W,0,0,0,0]);
if P mod 4 = 1 then
Add(params[11],[0,W^2 mod P,0,0,0,0]);
Add(params[11],[0,W^3 mod P,0,0,0,0]);
fi;
if P mod 4 = 1 then
xrange:=ShallowCopy(transversal4);
Add(xrange,0);
for x in xrange do
for y in [0..P-1] do
Add(params[11],[x,y,0,0,1,0]);
Add(params[11],[x,y,0,0,W,0]);
od;
od;
fi;
if P mod 4 = 3 then
for x in [0..(P-1)/2] do
for y in [0..P-1] do
Add(params[11],[x,y,0,0,1,0]);
od;
od;
fi;
if P mod 3 = 1 then
for x in [0..(P-1)/2] do
Add(params[11],[x,0,0,0,0,1]);
Add(params[11],[x,0,0,0,0,W]);
Add(params[11],[x,0,0,0,0,W^2 mod P]);
od;
for x in transversal3 do
Add(params[11],[0,x,0,0,0,1]);
Add(params[11],[0,x,0,0,0,W]);
Add(params[11],[0,x,0,0,0,W^2 mod P]);
od;
fi;
if P mod 3 = 2 then
for x in [0..(P-1)/2] do
Add(params[11],[x,0,0,0,0,1]);
od;
for x in [1..P-1] do
Add(params[11],[0,x,0,0,0,1]);
od;
fi;
for y in [0..P-1] do
for z in [0..(P-1)/2] do
for t in [0..(P-1)/2] do
Add(params[11],[0,y,1,0,z,t]);
Add(params[11],[0,y,W,0,z,t]);
od;
od;
od;
for y in [0..P-1] do
for x in [1..(P-1)/2] do
for z in [0..(P-1)/2] do
Add(params[11],[x,y,1,0,z,0]);
Add(params[11],[x,y,W,0,z,0]);
od;
od;
od;
for y in [0..P-1] do
for x in [1..(P-1)/2] do
for t in [1..(P-1)/2] do
for z in [0..P-1] do
Add(params[11],[x,y,1,0,z,t]);
Add(params[11],[x,y,W,0,z,t]);
od;
od;
od;
od;
if P mod 3 = 1 then
for x in [0..P-1] do
Add(params[11],[x,0,0,1,0,0]);
Add(params[11],[x,0,0,W,0,0]);
Add(params[11],[x,0,0,W^2 mod P,0,0]);
od;
for y in transversal3 do
Add(params[11],[1,y,0,1,0,0]);
Add(params[11],[W,y,0,W,0,0]);
Add(params[11],[W^2 mod P,y,0,W^2 mod P,0,0]);
od;
for x in transversal6 do
for y in [0..P-1] do
for z in [0..P-1] do
Add(params[11],[y,z,0,1,x,0]);
Add(params[11],[y,z,0,W,x,0]);
Add(params[11],[y,z,0,W^2 mod P,x,0]);
od;
od;
od;
for x in [0..P-1] do
for z in [1..(P-1)/2] do
Add(params[11],[x,0,0,1,0,z]);
Add(params[11],[x,0,0,W,0,z]);
Add(params[11],[x,0,0,W^2 mod P,0,z]);
od;
od;
for y in transversal3 do
for z in [1..(P-1)/2] do
Add(params[11],[1,y,0,1,0,z]);
Add(params[11],[W,y,0,W,0,z]);
Add(params[11],[W^2 mod P,y,0,W^2 mod P,0,z]);
od;
od;
fi;
if P mod 3 = 2 then
for x in [0..P-1] do
Add(params[11],[x,0,0,1,0,0]);
od;
for y in [1..P-1] do
Add(params[11],[1,y,0,1,0,0]);
od;
for x in [1..(P-1)/2] do
for y in [0..P-1] do
for z in [0..P-1] do
Add(params[11],[y,z,0,1,x,0]);
od;
od;
od;
for x in [0..P-1] do
for z in [1..(P-1)/2] do
Add(params[11],[x,0,0,1,0,z]);
od;
od;
for y in [1..P-1] do
for z in [1..(P-1)/2] do
Add(params[11],[1,y,0,1,0,z]);
od;
od;
fi;
if Length(params[11]) <>
(P^4+P^3+4*P^2+P-1+(P^2+2*P+3)*Gcd(P-1,3)+(P+2)*Gcd(P-1,4))/2
then Error("params[11] wrong"); fi;
if case = 11 then return params[11]; fi;
if case = 12 then return params[11]; fi;
if case = true then params[12] := params[11]; fi;
fi;
##Case 13, cb=bac=0, caa=baa, cac=-bab
if case = true or case = 13 then
##pb=pc=0
Add(params[13],[0,0,0,0,0,0]);
Add(params[13],[1,0,0,0,0,0]);
Add(params[13],[0,1,0,0,0,0]);
##pb=0, pc=baa or wbaa
Add(params[13],[0,0,0,0,1,0]);
Add(params[13],[0,0,0,0,W,0]);
Add(params[13],[0,1,0,0,1,0]);
Add(params[13],[0,1,0,0,W,0]);
Add(params[13],[0,W,0,0,1,0]);
Add(params[13],[0,W,0,0,W,0]);
for y in [0..P-1] do
Add(params[13],[1,y,0,0,1,0]);
Add(params[13],[1,y,0,0,W,0]);
od;
##pb=0, pc=bab
for x in [0..P-1] do
Add(params[13],[x,0,0,0,0,1]);
od;
Add(params[13],[-1,1,0,0,0,1] mod P);
Add(params[13],[-1,W,0,0,0,1] mod P);
##pb=pc=bab
Add(params[13],[0,0,0,1,0,1]);
Add(params[13],[1,0,0,1,0,1]);
Add(params[13],[0,1,0,1,0,1]);
##pb=bab, pc=-bab
for x in [0..P-1] do
Add(params[13],[x,0,0,1,0,-1] mod P);
od;
Add(params[13],[2,1,0,1,0,-1] mod P);
##pb=bab, pc=baa or wbaa
for x in [0..P-1] do
for y in [0..P-1] do
Add(params[13],[x,y,0,1,1,0]);
Add(params[13],[x,y,0,1,W,0]);
od;
od;
##pb=pc=baa
Add(params[13],[0,0,1,0,1,0]);
Add(params[13],[1,0,1,0,1,0]);
Add(params[13],[0,1,1,0,1,0]);
Add(params[13],[1,1,1,0,1,0]);
##pb=baa, pc=baa+bab
for x in [0..P-2] do ##Note that -1 is excluded
Add(params[13],[x,0,1,0,1,1]);
y:=((x+1)/2)*One(F); y:=IntFFE(y);
Add(params[13],[x,y,1,0,1,1]);
od;
Add(params[13],[-1,0,1,0,1,1] mod P);
Add(params[13],[-1,1,1,0,1,1] mod P);
##pb=baa, pc=-baa
Add(params[13],[0,0,1,0,-1,0] mod P);
Add(params[13],[0,1,1,0,-1,0] mod P);
Add(params[13],[0,W,1,0,-1,0] mod P);
for y in [0..P-1] do
Add(params[13],[1,y,1,0,-1,0] mod P);
od;
##pb=baa, pc=-baa+bab
half:=(P+1)/2;
Add(params[13],[1,-half,1,0,-1,1] mod P);
Add(params[13],[1,half,1,0,-1,1] mod P);
Add(params[13],[1,W-half,1,0,-1,1] mod P);
if P mod 4 = 1 then
Add(params[13],[1,W^2-half,1,0,-1,1] mod P);
Add(params[13],[1,W^3-half,1,0,-1,1] mod P);
fi;
for y in [0..P-1] do
Add(params[13],[0,y,1,0,-1,1] mod P);
Add(params[13],[1-W,y,1,0,-1,1] mod P);
od;
##pb=pc=wbaaa
Add(params[13],[0,0,W,0,W,0]);
Add(params[13],[1,0,W,0,W,0]);
Add(params[13],[0,1,W,0,W,0]);
Add(params[13],[1,1,W,0,W,0]);
##pb=wbaa, pc=wbaa+bab
for x in [0..P-2] do ##Note that -1 is excluded
Add(params[13],[x,0,W,0,W,1]);
y:=One(F)*((x+1)/(2*W)); y:=IntFFE(y);
Add(params[13],[x,y,W,0,W,1]);
od;
Add(params[13],[-1,0,W,0,W,1] mod P);
Add(params[13],[-1,1,W,0,W,1] mod P);
if Length(params[13]) <> 2*P^2+11*P+27+Gcd(P-1,4)
then Error("params[13] wrong"); fi;
if case = 13 then return params[13]; fi;
fi;
##Case 14, bac=0, cb=caa=baa, cac=-bab
if case = true or case = 14 then
##1. v <> +/- y
for y in [1,W] do
for u in [0..P-1] do
for x in [0..(P-1)/2] do
zrange:=[0..P-1];
if x = 0 then zrange:=[0..(P-1)/2]; fi;
for z in zrange do
Add(params[14],[0,u,0,x,y,z]);
od;
od;
od;
od;
for u in [1,W] do
for x in [0..(P-1)/2] do
zrange:=[0..P-1];
if x = 0 then zrange:=[0..(P-1)/2]; fi;
for z in zrange do
Add(params[14],[0,u,1,x,-1,z] mod P);
od;
od;
od;
for x in [0..P-1] do
for z in [0..P-1] do
new:=true;
for a in [1..P-1] do
x1:=One(F)*((x+z+x*a^2-z*a^2)/(2*a^3)); x1:=IntFFE(x1);
z1:=One(F)*((x+z-x*a^2+z*a^2)/(2*a^3)); z1:=IntFFE(z1);
if [x1,z1] < [x,z] then new:=false; break; fi;
od;
if new then Add(params[14],[0,0,1,x,-1,z] mod P); fi;
od;
od;
for v in [1,W] do
for x in [0..P-1] do
for z in [0..P-1] do
if x = (z+1) mod P then continue; fi;
x1:=(-x) mod P; z1:=(-z) mod P;
if [z1,x1] < [x,z] then continue; fi;
Add(params[14],[1,0,v,x,v,z]);
od;
od;
od;
for x in [0..P-1] do
for z in [0..P-1] do
if x = (z+1) mod P then continue; fi;
new:=true;
for a in [1..P-1] do
x1:=One(F)*((x+z+x*a^3-z*a^3)/(2*a^3)); x1:=IntFFE(x1);
z1:=One(F)*((x+z-x*a^3+z*a^3)/(2*a^3)); z1:=IntFFE(z1);
if [x1,z1] < [x,z] then new:=false; break; fi;
od;
if new then Add(params[14],[1,0,0,x,0,z]); fi;
od;
od;
for v in [1,W] do
for u in [0..(P-1)/2] do
Add(params[14],[1,u,v,0,v,-1] mod P);
od;
od;
for z in [0..P-1] do
Add(params[14],[1,1,0,z+1,0,z] mod P);
od;
for z in [0..P-1] do
new:=true;
for a in [1..P-1] do
z1:=One(F)*((-a^3+2*z+1)/(2*a^3)); z1:=IntFFE(z1);
if z1 < z then new:=false; break; fi;
od;
if new then Add(params[14],[1,0,0,z+1,0,z] mod P); fi;
od;
for v in [1,W] do
for z in [1..(P-1)/2] do
Add(params[14],[0,0,v,0,v,z]);
od;
od;
Add(params[14],[0,0,0,0,0,1]);
if P mod 3 = 1 then
Add(params[14],[0,0,0,0,0,W]);
Add(params[14],[0,0,0,0,0,W^2 mod P]);
fi;
Add(params[14],[0,0,0,1,0,-1] mod P);
Add(params[14],[0,0,W,1,W,-1] mod P);
Add(params[14],[0,0,W^2,1,W^2,-1] mod P);
for v in [1,W] do
for u in [0,1] do
Add(params[14],[0,u,v,0,v,0]);
od;
od;
xrange:=[0,1];
if P mod 3 = 1 then xrange:=[0,1,W,W^2 mod P]; fi;
for u in [0,1] do
for x in xrange do
Add(params[14],[0,u,0,x,0,x]);
od;
od;
if Length(params[14]) <> P^3+2*P^2+6*P+10+(P+4)*Gcd(P-1,3)
then Error("params[14] wrong"); fi;
if case = 14 then return params[14]; fi;
fi;
##Case 15, cb=baa=bac=caa=0
if case = true or case = 15 then
Add(params[15],[0,0,0,0,0,0]);
Add(params[15],[0,0,0,0,1,0]);
Add(params[15],[0,0,0,1,1,0]);
if P mod 3 = 1 then
Add(params[15],[0,0,0,1,W,0]);
fi;
Add(params[15],[0,1,0,0,0,0]);
Add(params[15],[0,W,0,0,0,0]);
Add(params[15],[0,1,0,0,1,0]);
Add(params[15],[0,W,0,0,1,0]);
Add(params[15],[0,1,0,1,0,0]);
Add(params[15],[0,W,0,1,0,0]);
Add(params[15],[0,1,0,1,1,0]);
Add(params[15],[0,W,0,1,1,0]);
if P mod 3 = 1 then
Add(params[15],[0,1,0,1,W,0]);
Add(params[15],[0,W,0,1,W,0]);
Add(params[15],[0,1,0,1,W^2 mod P,0]);
Add(params[15],[0,W,0,1,W^2 mod P,0]);
fi;
Add(params[15],[1,1,0,0,0,0]);
Add(params[15],[W,W,0,0,0,0]);
Add(params[15],[1,1,0,0,1,0]);
Add(params[15],[W,W,0,0,1,0]);
for u in [1..(P-1)/2] do
u1:=One(F)*u^-1; u1:=IntFFE(u1);
if u1 < u or (P-u1) < u then continue; fi;
Add(params[15],[1,1,0,1,u,0]);
Add(params[15],[W,W,0,1,u,0]);
od;
Add(params[15],[1,W,0,0,0,0]);
Add(params[15],[1,W,0,0,1,0]);
Add(params[15],[1,W,0,1,0,0]);
for u in [1..(P-1)/2] do
Add(params[15],[1,W,0,1,u,0]);
od;
Add(params[15],[0,0,0,0,0,1]);
Add(params[15],[0,0,0,0,1,1]);
Add(params[15],[0,0,0,0,W,1]);
Add(params[15],[0,1,0,0,0,1]);
Add(params[15],[0,1,0,0,1,1]);
Add(params[15],[0,1,0,0,W,1]);
Add(params[15],[0,W,0,0,0,1]);
Add(params[15],[0,W,0,0,1,1]);
Add(params[15],[0,W,0,0,W,1]);
Add(params[15],[1,0,0,0,0,1]);
Add(params[15],[1,0,0,0,1,1]);
Add(params[15],[1,0,0,0,W,1]);
Add(params[15],[W,0,0,0,0,1]);
Add(params[15],[W,0,0,0,1,1]);
Add(params[15],[W,0,0,0,W,1]);
for x in [1,W] do
for y in [1,W] do
for u in [0..P-1] do
Add(params[15],[x,y,0,0,u,1]);
od;
od;
od;
for x in [1,W] do
for y in [0..P-1] do
for u in [0..P-1] do
Add(params[15],[x,y,0,1,u,1]);
od;
od;
od;
for y in [0,1,W] do
for u in [0..P-1] do
Add(params[15],[0,y,0,1,u,1]);
od;
od;
for t in [0..P-2] do
for u in [t+1..P-1] do
Add(params[15],[0,0,1,t,u,1]);
Add(params[15],[0,1,1,t,u,1]);
Add(params[15],[0,W,1,t,u,1]);
for y in [0..P-1] do
Add(params[15],[1,y,1,t,u,1]);
Add(params[15],[W,y,1,t,u,1]);
od;
od;
od;
range:=[];
for k in [1..(P-1)/2] do
k2:=k^2 mod P;
km2:=One(F)*(k2^-1); km2:=IntFFE(km2);
if k2 <= km2 then AddSet(range,k2); fi;
od;
for t in [0..P-1] do
Add(params[15],[0,0,1,t,t,1]);
Add(params[15],[0,1,1,t,t,1]);
Add(params[15],[0,W,1,t,t,1]);
for k2 in range do
Add(params[15],[1,k2,1,t,t,1]);
Add(params[15],[W,W*k2,1,t,t,1] mod P);
od;
for k in [1..(P-1)/2] do
Add(params[15],[1,W*k^2,1,t,t,1] mod P);
od;
od;
if Length(params[15]) <> P^3+(7*P^2+17*P+59+5*Gcd(P-1,3)+(P+1)*Gcd(P-1,4))/2
then Error("params[15] wrong"); fi;
if case = 15 then return params[15]; fi;
fi;
##Case 16, cb=bac=caa=0, baa=cac
if case = true or case = 16 then
for y in [0,1,W] do
Add(params[16],[0,y,0,0,0,0]);
Add(params[16],[0,y,0,1,0,0]);
Add(params[16],[0,y,0,W,0,0]);
for t in [0..P-1] do
Add(params[16],[1,y,0,t,0,0]);
Add(params[16],[W,y,0,t,0,0]);
od;
od;
Add(params[16],[0,0,1,0,0,0]);
Add(params[16],[0,0,W,0,0,0]);
Add(params[16],[0,1,1,0,0,0]);
Add(params[16],[0,1,W,0,0,0]);
Add(params[16],[0,W,1,0,0,0]);
Add(params[16],[0,W,W,0,0,0]);
if P mod 4 = 1 then
Add(params[16],[0,W^2 mod P,1,0,0,0]);
Add(params[16],[0,W^2 mod P,W,0,0,0]);
Add(params[16],[0,W^3 mod P,1,0,0,0]);
Add(params[16],[0,W^3 mod P,W,0,0,0]);
fi;
for y in [0..P-1] do
Add(params[16],[0,y,1,1,0,0]);
Add(params[16],[0,y,W,1,0,0]);
Add(params[16],[0,y,1,W,0,0]);
Add(params[16],[0,y,W,W,0,0]);
od;
for y in [0..P-1] do
for t in [0..P-1] do
Add(params[16],[1,y,1,t,0,0]);
Add(params[16],[1,y,W,t,0,0]);
Add(params[16],[W,y,1,t,0,0]);
Add(params[16],[W,y,W,t,0,0]);
od;
od;
Add(params[16],[0,0,0,0,0,1]);
Add(params[16],[0,0,1,0,0,1]);
Add(params[16],[0,0,W,0,0,1]);
if P mod 3 = 1 then
Add(params[16],[0,0,W^2 mod P,0,0,1]);
Add(params[16],[0,0,W^3 mod P,0,0,1]);
Add(params[16],[0,0,W^4 mod P,0,0,1]);
Add(params[16],[0,0,W^5 mod P,0,0,1]);
fi;
for z in [0..P-1] do
Add(params[16],[0,0,z,1,0,1]);
Add(params[16],[0,0,z,W,0,1]);
od;
for z in [0..P-1] do
for t in [0..P-1] do
Add(params[16],[0,1,z,t,0,1]);
Add(params[16],[0,W,z,t,0,1]);
od;
od;
for y in [0..P-1] do
for z in [0..P-1] do
for t in [0..P-1] do
Add(params[16],[1,y,z,t,0,1]);
Add(params[16],[W,y,z,t,0,1]);
od;
od;
od;
Add(params[16],[0,0,0,0,1,0]);
Add(params[16],[0,1,0,0,1,0]);
Add(params[16],[0,W,0,0,1,0]);
if P mod 3 = 1 then
Add(params[16],[0,W^2 mod P,0,0,1,0]);
Add(params[16],[0,W^3 mod P,0,0,1,0]);
Add(params[16],[0,W^4 mod P,0,0,1,0]);
Add(params[16],[0,W^5 mod P,0,0,1,0]);
fi;
if P mod 4 = 1 then
for v in [1,W,W^2 mod P,W^3 mod P] do
for y in [0..(P-1)/2] do
Add(params[16],[0,y,0,0,1,v]);
od;
od;
fi;
if P mod 4 = 3 then
for v in [1,W] do
for y in [0..P-1] do
Add(params[16],[0,y,0,0,1,v]);
od;
od;
fi;
for v in [0..P-1] do
for y in [0..P-1] do
Add(params[16],[0,y,0,1,1,v]);
Add(params[16],[0,y,0,W,1,v]);
od;
od;
for t in [0..P-1] do
for v in [0..P-1] do
for y in [0..P-1] do
Add(params[16],[0,y,1,t,1,v]);
Add(params[16],[0,y,W,t,1,v]);
od;
od;
od;
for z in [0..P-1] do
for t in [0..P-1] do
for v in [0..P-1] do
for y in [0..P-1] do
Add(params[16],[1,y,z,t,1,v]);
Add(params[16],[W,y,z,t,1,v]);
od;
od;
od;
od;
if Length(params[16]) <> 2*P^4+4*P^3+8*P^2+14*P+11+4*Gcd(P-1,3)+3*Gcd(P-1,4)
then Error("params[16] wrong"); fi;
if case = 16 then return params[16]; fi;
fi;
##Case 17, cb=bac=0, cac=baa, caa=bab
if case = true or case = 17 then
mats:=[];
for y5 in [0,1,lns] do
for y6 in [0..P-1] do
for y3 in [0..P-1] do
for y4 in [0..P-1] do
A:=One(F)*MyCutVector([y3,y4,y5,y6], 2);
if A = 0*A then
Add(mats,A);
continue;
fi;
new:=1;
index:=P^3*y5+P^2*y6+P*y3+y4;
for a in [1..P-1] do
for x in CU do
c:=a*x;
B:=One(F)*MyCutVector([a^-1*c^2,0,0,c], 2);
C:=One(F)*MyCutVector([a*c^2,0,0,a^2*c], 2);
D:=B*A*C^-1;
z3:=IntFFE(D[1][1]);
z4:=IntFFE(D[1][2]);
z5:=IntFFE(D[2][1]);
z6:=IntFFE(D[2][2]);
ind1:=P^3*z5+P^2*z6+P*z3+z4;
if ind1 < index then new:=0; fi;
B:=One(F)*MyCutVector([0,a^-1*c^2,c,0], 2);
C:=One(F)*MyCutVector([0,a*c^2,a^2*c,0], 2);
D:=B*A*C^-1;
z3:=IntFFE(D[1][1]);
z4:=IntFFE(D[1][2]);
z5:=IntFFE(D[2][1]);
z6:=IntFFE(D[2][2]);
ind1:=P^3*z5+P^2*z6+P*z3+z4;
if ind1 < index then new:=0; fi;
if new = 0 then break; fi;
od;
if new = 0 then break; fi;
od;
if new = 1 then
Add(mats,A);
fi;
od;
od;
od;
od;
for AS in mats do
stab1:=[];
stab2:=[];
for a in [1..P-1] do
for x in CU do
c:=a*x;
B:=One(F)*MyCutVector([a^-1*c^2,0,0,c], 2);
C:=One(F)*MyCutVector([a*c^2,0,0,a^2*c], 2);
D:=B*AS*C^-1;
if D = AS then
Add(stab1,One(F)*MyCutVector([a,0,0,0,a^-1*c^2,0,0,0,c], 3));
Add(stab2,C);
fi;
B:=One(F)*MyCutVector([0,a^-1*c^2,c,0], 2);
C:=One(F)*MyCutVector([0,a*c^2,a^2*c,0], 2);
D:=B*AS*C^-1;
if D = AS then
Add(stab1,One(F)*MyCutVector([a,0,0,0,0,a^-1*c^2,0,c,0], 3));
Add(stab2,C);
fi;
od;
od;
y3:=IntFFE(AS[1][1]);
y4:=IntFFE(AS[1][2]);
y5:=IntFFE(AS[2][1]);
y6:=IntFFE(AS[2][2]);
for y1 in [0..P-1] do
for y2 in [0..P-1] do
A:=One(F)*MyCutVector([y1,y2,y3,y4,y5,y6], 3);
if A = 0*A then
Add(params[17],[0,0,0,0,0,0]);
continue;
fi;
new:=1;
index:=P*y1+y2;
for ii in [1..Length(stab1)] do
B:=stab1[ii];
C:=stab2[ii];
D:=B*A*C^-1;
z1:=IntFFE(D[1][1]);
z2:=IntFFE(D[1][2]);
ind1:=P*z1+z2;
if ind1 < index then new:=0; fi;
if new = 0 then break; fi;
od;
if new = 1 then
Add(params[17],[y1,y2,y3,y4,y5,y6]);
fi;
od;
od;
od;
if Length(params[17]) <>
(P^4+2*P^3+3*P^2+4*P+2)*(P-1)/Gcd(P-1,3)+3*P+4+(P^2+P+1)*Gcd(P-1,4)/2
then Error("params[17] wrong"); fi;
if case = 17 then return params[17]; fi;
fi;
##Case 18, cb=bac=0, cac=baa, caa=wbab (p=1mod3 only)
if case = true or case = 18 then
if P mod 3 = 1 then
mats:=[];
for y5 in [0,1,lns] do
for y6 in [0..P-1] do
for y3 in [0..P-1] do
for y4 in [0..P-1] do
A:=One(F)*MyCutVector([y3,y4,y5,y6], 2);
if A = 0*A then
Add(mats,A);
continue;
fi;
new:=1;
index:=P^3*y5+P^2*y6+P*y3+y4;
for a in [1..P-1] do
for x in CU do
c:=a*x;
B:=One(F)*MyCutVector([a^-1*c^2,0,0,c], 2);
C:=One(F)*MyCutVector([a*c^2,0,0,a^2*c], 2);
D:=B*A*C^-1;
z3:=IntFFE(D[1][1]);
z4:=IntFFE(D[1][2]);
z5:=IntFFE(D[2][1]);
z6:=IntFFE(D[2][2]);
ind1:=P^3*z5+P^2*z6+P*z3+z4;
if ind1 < index then new:=0; fi;
if new = 0 then break; fi;
od;
if new = 0 then break; fi;
od;
if new = 1 then
Add(mats,A);
fi;
od;
od;
od;
od;
for AS in mats do
stab1:=[];
stab2:=[];
for a in [1..P-1] do
for x in CU do
c:=a*x;
B:=One(F)*MyCutVector([a^-1*c^2,0,0,c], 2);
C:=One(F)*MyCutVector([a*c^2,0,0,a^2*c], 2);
D:=B*AS*C^-1;
if D = AS then
Add(stab1,One(F)*MyCutVector([a,0,0,0,a^-1*c^2,0,0,0,c], 3));
Add(stab2,C);
fi;
od;
od;
y3:=IntFFE(AS[1][1]);
y4:=IntFFE(AS[1][2]);
y5:=IntFFE(AS[2][1]);
y6:=IntFFE(AS[2][2]);
for y1 in [0..P-1] do
for y2 in [0..P-1] do
A:=One(F)*MyCutVector([y1,y2,y3,y4,y5,y6], 3);
if A = 0*A then
Add(params[18],[0,0,0,0,0,0]);
continue;
fi;
new:=1;
index:=P*y1+y2;
for ii in [1..Length(stab1)] do
B:=stab1[ii];
C:=stab2[ii];
D:=B*A*C^-1;
z1:=IntFFE(D[1][1]);
z2:=IntFFE(D[1][2]);
ind1:=P*z1+z2;
if ind1 < index then new:=0; fi;
if new = 0 then break; fi;
od;
if new = 1 then
Add(params[18],[y1,y2,y3,y4,y5,y6]);
fi;
od;
od;
od;
if Length(params[18]) <> (2*P^5+2*P^4+2*P^3+2*P^2+14*P+17)/3
then Error("params[18] wrong"); fi;
fi;
if case = 18 then return params[18]; fi;
fi;
##Case 19, cb=baa=caa=cac=0
if case = true or case = 19 then
Add(params[19],[0,0,0,0,0,0]);
Add(params[19],[1,0,0,0,0,0]);
Add(params[19],[W,0,0,0,0,0]);
Add(params[19],[0,1,0,0,0,0]);
for x in [0,1,W] do
for y in [0,1] do
Add(params[19],[x,y,1,0,0,0]);
od;
od;
Add(params[19],[0,0,0,1,0,0]);
Add(params[19],[1,0,0,1,0,0]);
Add(params[19],[W,0,0,1,0,0]);
Add(params[19],[0,1,0,1,0,0]);
for t in [0..P-1] do
Add(params[19],[0,0,1,t,1,0]);
Add(params[19],[0,1,1,t,1,0]);
Add(params[19],[0,W,1,t,1,0]);
for y in [0..P-1] do
Add(params[19],[1,y,1,t,1,0]);
Add(params[19],[W,y,1,t,1,0]);
od;
od;
for x in [0,1,W] do
for t in [0,1,W] do
Add(params[19],[x,0,0,t,1,0]);
od;
od;
for x in [1,W] do
for t in [0..P-1] do
Add(params[19],[x,1,0,t,1,0]);
od;
od;
Add(params[19],[0,1,0,0,1,0]);
Add(params[19],[0,1,0,1,1,0]);
Add(params[19],[0,1,0,W,1,0]);
if P mod 4 = 1 then
Add(params[19],[0,1,0,W^2 mod P,1,0]);
Add(params[19],[0,1,0,W^3 mod P,1,0]);
fi;
half:=(P+1)/2;
for x in [0..P-1] do
if x = half then continue; fi;
for z in [0,1,W] do
for t in [0,1] do
Add(params[19],[z,t,x,0,0,1]);
od;
od;
od;
Add(params[19],[1,0,half,0,0,1]);
Add(params[19],[W,0,half,0,0,1]);
Add(params[19],[1,0,half,1,0,1]);
Add(params[19],[W,0,half,1,0,1]);
Add(params[19],[0,0,half,0,0,1]);
Add(params[19],[0,0,half,1,0,1]);
Add(params[19],[0,1,half,0,0,1]);
Add(params[19],[0,1,half,1,0,1]);
Add(params[19],[0,W,half,1,0,1]);
if Length(params[19]) <> 2*P^2+11*P+27+Gcd(P-1,4)
then Error("params[19] wrong"); fi;
if case = 19 then return params[19]; fi;
fi;
##Case 20, cb=baa=cac, caa=bab
if case = true or case = 20 then
for u in [0,1,W] do
Add(params[20],[0,0,0,0,u,0]);
Add(params[20],[0,0,0,1,u,0]);
Add(params[20],[0,0,0,W,u,0]);
for t in [0..P-1] do
Add(params[20],[1,0,0,t,u,0]);
Add(params[20],[W,0,0,t,u,0]);
od;
od;
Add(params[20],[0,1,0,0,0,0]);
Add(params[20],[0,1,0,0,1,0]);
Add(params[20],[0,1,0,0,W,0]);
if P mod 3 = 1 then
Add(params[20],[0,1,0,0,W^2 mod P,0]);
Add(params[20],[0,1,0,0,W^3 mod P,0]);
Add(params[20],[0,1,0,0,W^4 mod P,0]);
Add(params[20],[0,1,0,0,W^5 mod P,0]);
fi;
for u in [0..P-1] do
Add(params[20],[0,1,0,1,u,0]);
Add(params[20],[0,1,0,W,u,0]);
od;
for t in [0..P-1] do
for u in [0..P-1] do
Add(params[20],[1,1,0,t,u,0]);
Add(params[20],[W,1,0,t,u,0]);
od;
od;
Add(params[20],[0,0,0,0,0,1]);
Add(params[20],[0,1,0,0,0,1]);
Add(params[20],[0,W,0,0,0,1]);
if P mod 4 = 1 then
Add(params[20],[0,W^2 mod P,0,0,0,1]);
Add(params[20],[0,W^3 mod P,0,0,0,1]);
fi;
for y in [0..P-1] do
Add(params[20],[0,y,0,0,1,1]);
Add(params[20],[0,y,0,0,W,1]);
od;
for y in [0..P-1] do
for u in [0..P-1] do
Add(params[20],[0,y,0,1,u,1]);
Add(params[20],[0,y,0,W,u,1]);
od;
od;
for y in [0..P-1] do
for t in [0..P-1] do
for u in [0..P-1] do
Add(params[20],[1,y,0,t,u,1]);
Add(params[20],[W,y,0,t,u,1]);
od;
od;
od;
for v in [0..P-1] do
Add(params[20],[0,0,1,0,0,v]);
Add(params[20],[0,1,1,0,0,v]);
Add(params[20],[0,W,1,0,0,v]);
if P mod 4 = 1 then
Add(params[20],[0,W^2 mod P,1,0,0,v]);
Add(params[20],[0,W^3 mod P,1,0,0,v]);
fi;
for y in [0..P-1] do
Add(params[20],[0,y,1,0,1,v]);
Add(params[20],[0,y,1,0,W,v]);
od;
for y in [0..P-1] do
for u in [0..P-1] do
Add(params[20],[0,y,1,1,u,v]);
Add(params[20],[0,y,1,W,u,v]);
od;
od;
for y in [0..P-1] do
for t in [0..P-1] do
for u in [0..P-1] do
Add(params[20],[1,y,1,t,u,v]);
Add(params[20],[W,y,1,t,u,v]);
od;
od;
od;
od;
if Length(params[20]) <> 2*P^4+4*P^3+6*P^2+11*P+11+2*Gcd(P-1,3)+(P+1)*Gcd(P-1,4)
then Error("params[20] wrong"); fi;
if case = 20 then return params[20]; fi;
fi;
##Case 21, cb=caa=cac=0, bab=baa
if case = true or case = 21 then
Add(params[21],[0,0,0,0,0,0]);
Add(params[21],[1,0,0,0,0,0]);
Add(params[21],[W,0,0,0,0,0]);
Add(params[21],[0,1,0,0,0,0]);
for x in [0..P-1] do
Add(params[21],[x,0,1,0,0,0]);
Add(params[21],[x,0,W,0,0,0]);
Add(params[21],[x,1,1,0,0,0]);
Add(params[21],[x,1,W,0,0,0]);
od;
Add(params[21],[1,0,0,1,0,0]);
Add(params[21],[W,0,0,1,0,0]);
for x in [0..P-1] do
Add(params[21],[0,x,0,1,0,0]);
od;
for y in [0..P-1] do
for z in [0..P-1] do
for t in [0..P-1] do
Add(params[21],[1,y,z,t,1,0]);
Add(params[21],[W,y,z,t,1,0]);
od;
od;
od;
for y in [0..P-1] do
for t in [0..P-1] do
Add(params[21],[0,y,1,t,1,0]);
Add(params[21],[0,y,W,t,1,0]);
od;
od;
for t in [0..P-1] do
Add(params[21],[0,1,0,t,1,0]);
Add(params[21],[0,W,0,t,1,0]);
if P mod 4 = 1 then
Add(params[21],[0,W^2 mod P,0,t,1,0]);
Add(params[21],[0,W^3 mod P,0,t,1,0]);
fi;
od;
Add(params[21],[0,0,0,0,1,0]);
Add(params[21],[0,0,0,1,1,0]);
Add(params[21],[0,0,0,W,1,0]);
if P mod 4 = 1 then
Add(params[21],[0,0,0,W^2 mod P,1,0]);
Add(params[21],[0,0,0,W^3 mod P,1,0]);
fi;
for x in [0..P-1] do
if x = 1 then continue; fi;
for z in [0..P-1] do
for t in [0,1] do
Add(params[21],[x,0,z,t,0,1]);
od;
od;
od;
for x in [0..P-1] do
if x = W then continue; fi;
for z in [0..P-1] do
for t in [0,1] do
Add(params[21],[x,0,z,t,0,W]);
od;
od;
od;
half:=(P+1)/2;
wover2:=One(F)*(W/2); wover2:=IntFFE(wover2);
for z in [0..P-1] do
if z = half then continue; fi;
Add(params[21],[1,0,z,0,0,1]);
Add(params[21],[1,1,z,0,0,1]);
od;
for z in [0..P-1] do
if z = wover2 then continue; fi;
Add(params[21],[W,0,z,0,0,W]);
Add(params[21],[W,1,z,0,0,W]);
od;
Add(params[21],[1,0,half,0,0,1]);
Add(params[21],[W,0,wover2,0,0,W]);
Add(params[21],[1,0,half,1,0,1]);
Add(params[21],[W,0,wover2,1,0,W]);
for t in [0..P-1] do
Add(params[21],[1,1,half,t,0,1]);
Add(params[21],[W,1,wover2,t,0,W]);
od;
if Length(params[21]) <> 2*P^3+6*P^2+7*P+7+(P+1)*Gcd(P-1,4)
then Error("params[21] wrong"); fi;
if case = 21 then return params[21]; fi;
fi;
##Case 22, cb=baa=caa=0, cac=wbab
if case = true or case = 22 then
mats:=[];
bcrange:=[[0,1]];
for i in [0..P-1] do
Add(bcrange,[1,i]);
od;
for y3 in [0,1] do
for y4 in [0..P-1] do
for y5 in [0..P-1] do
for y6 in [0..P-1] do
A:=One(F)*MyCutVector([y3,y4,y5,y6], 2);
if A = 0*A then
Add(mats,A);
continue;
fi;
new:=1;
index:=P^3*y3+P^2*y4+P*y5+y6;
for bc in bcrange do
b:=bc[1]; c:=bc[2];
for m in [-1,1] do
B:=One(F)*MyCutVector([W*b,m*c,W*c,W*m*b], 2);
C:=One(F)*MyCutVector([W*(W*b^2+c^2),m*2*W*b*c,2*W^2*b*c,m*W*(W*b^2+c^2)], 2);
D:=B*A*C^-1;
if D[1][1] <> Zero(F) then D:=D[1][1]^-1*D; fi;
if D[1][1] = Zero(F) and D[1][2] <> Zero(F)
then D:=D[1][2]^-1*D; fi;
if D[1][1] = Zero(F) and D[1][2] = Zero(F) and D[2][1] <> Zero(F)
then D:=D[2][1]^-1*D; fi;
if D[1][1]=Zero(F) and D[1][2]=Zero(F) and D[2][1]=Zero(F) and D[2][2]<>Zero(F)
then D:=D[2][2]^-1*D; fi;
z3:=IntFFE(D[1][1]);
z4:=IntFFE(D[1][2]);
z5:=IntFFE(D[2][1]);
z6:=IntFFE(D[2][2]);
ind1:=P^3*z3+P^2*z4+P*z5+z6;
if ind1 < index then new:=0; fi;
if new = 0 then break; fi;
od;
if new = 0 then break; fi;
od;
if new = 1 then Add(mats,A); fi;
od;
od;
od;
od;
for AS in mats do
stab1:=[];
stab2:=[];
for b in [0..P-1] do
for c in [0..P-1] do
for m in [-1,1] do
if b+c = 0 then continue; fi;
B:=One(F)*MyCutVector([W*b,m*c,W*c,W*m*b], 2);
C:=One(F)*MyCutVector([W*(W*b^2+c^2),m*2*W*b*c,2*W^2*b*c,m*W*(W*b^2+c^2)], 2);
D:=B*AS*C^-1;
if D[1][1] <> Zero(F)
then D:=D[1][1]^-1*D; fi;
if D[1][1] = Zero(F) and D[1][2] <> Zero(F)
then D:=D[1][2]^-1*D; fi;
if D[1][1] = Zero(F) and D[1][2] = Zero(F) and D[2][1] <> Zero(F)
then D:=D[2][1]^-1*D; fi;
if D[1][1]=Zero(F) and D[1][2]=Zero(F) and D[2][1]=Zero(F) and D[2][2]<>Zero(F)
then D:=D[2][2]^-1*D; fi;
if D = AS then
Add(stab1,One(F)*MyCutVector([1,0,0,0,W*b,m*c,0,W*c,W*m*b], 3));
Add(stab2,C);
fi;
od;
od;
od;
y3:=IntFFE(AS[1][1]);
y4:=IntFFE(AS[1][2]);
y5:=IntFFE(AS[2][1]);
y6:=IntFFE(AS[2][2]);
for y1 in [0..P-1] do
for y2 in [0..P-1] do
A:=One(F)*MyCutVector([y1,y2,y3,y4,y5,y6], 3);
if A = 0*A then
Add(params[22],[0,0,0,0,0,0]);
continue;
fi;
new:=1;
index:=P*y1+y2;
for ii in [1..Length(stab1)] do
B:=stab1[ii];
C:=stab2[ii];
D:=B*A*C^-1;
z1:=IntFFE(D[1][1]);
z2:=IntFFE(D[1][2]);
ind1:=P*z1+z2;
if ind1 < index then new:=0; fi;
if new = 0 then break; fi;
od;
if new = 1 then
Add(params[22],[y1,y2,y3,y4,y5,y6]);
fi;
od;
od;
od;
if Length(params[22]) <> (2*P^3+3*P^2+3*P+13-Gcd(P-1,3)+(P+1)*Gcd(P-1,4))/2
then Error("params[22] wrong"); fi;
if case = 22 then return params[22]; fi;
fi;
## Case 23, cb=baa=0, caa=bac, cac=wbab
if case = true or case = 23 then
sol:=0;
if P mod 3 = 2 then
for x in [1..P-1] do
if One(F)*(12*W*x^2+1) = Zero(F) then sol:=x; break; fi;
od;
fi;
mats:=[];
for y5 in [0,1,lns] do
for y6 in [0..P-1] do
for y3 in [0..P-1] do
for y4 in [0..P-1] do
A:=One(F)*MyCutVector([y3,y4,y5,y6], 2);
if A = 0*A then
Add(mats,A);
continue;
fi;
new:=1;
index:=P^3*y5+P^2*y6+P*y3+y4;
for a in [1..P-1] do
for m in [-1,1] do
B:=One(F)*MyCutVector([a,0,0,m*a], 2);
C:=One(F)*MyCutVector([a^3,0,0,m*a^3], 2);
D:=B*A*C^-1;
z3:=IntFFE(D[1][1]);
z4:=IntFFE(D[1][2]);
z5:=IntFFE(D[2][1]);
z6:=IntFFE(D[2][2]);
ind1:=P^3*z5+P^2*z6+P*z3+z4;
if ind1 < index then new:=0; fi;
if P mod 3 = 2 and new = 1 then
for b in [sol,-sol] do
B:=One(F)*MyCutVector([-2*W*a*b,a,m*W*a,-2*m*W*a*b], 2);
C:=One(F)*MyCutVector([8/3*W^2*a^3*b,4/3*W*a^3,4/3*m*W^2*a^3,8/3*m*W^2*a^3*b], 2);
D:=B*A*C^-1;
z3:=IntFFE(D[1][1]);
z4:=IntFFE(D[1][2]);
z5:=IntFFE(D[2][1]);
z6:=IntFFE(D[2][2]);
ind1:=P^3*z5+P^2*z6+P*z3+z4;
if ind1 < index then new:=0; fi;
if new = 0 then break; fi;
od;
fi;
if new = 0 then break; fi;
od;
if new = 0 then break; fi;
od;
if new = 1 then
Add(mats,A);
fi;
od;
od;
od;
od;
for AS in mats do
stab1:=[];
stab2:=[];
for a in [1..P-1] do
for m in [-1,1] do
B:=One(F)*MyCutVector([a,0,0,m*a], 2);
C:=One(F)*MyCutVector([a^3,0,0,m*a^3], 2);
D:=B*AS*C^-1;
if D = AS then
Add(stab1,One(F)*MyCutVector([a,0,0,0,a,0,0,0,m*a], 3));
Add(stab2,C);
fi;
if P mod 3 = 2 then
for b in [sol,-sol] do
B:=One(F)*MyCutVector([-2*W*a*b,a,m*W*a,-2*m*W*a*b], 2);
C:=One(F)*MyCutVector([8/3*W^2*a^3*b,4/3*W*a^3,4/3*m*W^2*a^3,8/3*m*W^2*a^3*b], 2);
D:=B*AS*C^-1;
if D = AS then
Add(stab1,
One(F)*MyCutVector([4*W*a*b,-3*W*a*b,a/2,0,-2*W*a*b,a,0,m*W*a,-2*m*W*a*b], 3));
Add(stab2,C);
fi;
od;
fi;
od;
od;
y3:=IntFFE(AS[1][1]);
y4:=IntFFE(AS[1][2]);
y5:=IntFFE(AS[2][1]);
y6:=IntFFE(AS[2][2]);
for y1 in [0..P-1] do
for y2 in [0..P-1] do
A:=One(F) * MyCutVector([y1,y2,y3,y4,y5,y6], 3);
if A = 0*A then
Add(params[23],[0,0,0,0,0,0]);
continue;
fi;
new:=1;
index:=P*y1+y2;
for ii in [1..Length(stab1)] do
B:=stab1[ii];
C:=stab2[ii];
D:=B*A*C^-1;
z1:=IntFFE(D[1][1]);
z2:=IntFFE(D[1][2]);
ind1:=P*z1+z2;
if ind1 < index then new:=0; fi;
if new = 0 then break; fi;
od;
if new = 1 then
Add(params[23],[y1,y2,y3,y4,y5,y6]);
fi;
od;
od;
od;
if P mod 3 = 1 then
expect:=P^5+P^4+P^3+P^2+P+2+(P^2+P+1)*Gcd(P-1,4)/2;
else
expect:=P^5/3+P^4/3+P^3/3+P^2/3+P+2+(P^2+P+1)*Gcd(P-1,4)/2;
fi;
if Length(params[23]) <> expect then Error("params[23] wrong"); fi;
if case = 23 then return params[23]; fi;
fi;
## Case 24, cb=baa=0, caa=xbab+bac, cac=wbab
## where x is not a value of y(y^2+3w)/(3y^2+w)
if case = true or case = 24 then
if P mod 3 = 2 then
val:=[];
for x in [0..P-1] do
if One(F)*(3*x^2+W) <> Zero(F) then
a:=One(F)*(x*(x^2+3*W))*(One(F)*(3*x^2+W))^-1;
AddSet(val,IntFFE(a));
fi;
od;
for a in [1..P-1] do
if not a in val then s:=a; break; fi;
od;
for y in [1..P-1] do
if One(F)*(W*y^2+3) = Zero(F) then b:=y; break; fi;
od;
B1:=One(F)*MyCutVector([2,2*b,2*W*b,2], 2);
C1:=One(F)*MyCutVector([32,-32*b,-32*W*b,32], 2);
B2:=One(F)*MyCutVector([2,-2*b,-2*W*b,2], 2);
C2:=One(F)*MyCutVector([32,32*b,32*W*b,32], 2);
BB1:=One(F)*MyCutVector([-4,s*b+3,3*s*W^-1+b,0,2,2*b,0,2*W*b,2], 3);
BB2:=One(F)*MyCutVector([-4,-s*b+3,3*s*W^-1-b,0,2,-2*b,0,-2*W*b,2], 3);
mats:=[];
for y5 in [0,1,lns] do
for y6 in [0..P-1] do
for y3 in [0..P-1] do
for y4 in [0..P-1] do
A:=One(F)*MyCutVector([y3,y4,y5,y6], 2);
if A = 0*A then
Add(mats,A);
continue;
fi;
new:=true;
index:=P^3*y5+P^2*y6+P*y3+y4;
A1:=B1*A*C1^-1;
A2:=B2*A*C2^-1;
for a in [1..(P-1)/2] do
D:=(One(F)*a)^-2*A;
z3:=IntFFE(D[1][1]);
z4:=IntFFE(D[1][2]);
z5:=IntFFE(D[2][1]);
z6:=IntFFE(D[2][2]);
ind1:=P^3*z5+P^2*z6+P*z3+z4;
if ind1 < index then new:=false; break; fi;
D:=(One(F)*a)^-2*A1;
z3:=IntFFE(D[1][1]);
z4:=IntFFE(D[1][2]);
z5:=IntFFE(D[2][1]);
z6:=IntFFE(D[2][2]);
ind1:=P^3*z5+P^2*z6+P*z3+z4;
if ind1 < index then new:=false; break; fi;
D:=(One(F)*a)^-2*A2;
z3:=IntFFE(D[1][1]);
z4:=IntFFE(D[1][2]);
z5:=IntFFE(D[2][1]);
z6:=IntFFE(D[2][2]);
ind1:=P^3*z5+P^2*z6+P*z3+z4;
if ind1 < index then new:=false; break; fi;
od;
if new then
Add(mats,A);
fi;
od;
od;
od;
od;
for AS in mats do
stab1:=[];
stab2:=[];
AS1:=B1*AS*C1^-1;
AS2:=B2*AS*C2^-1;
for a in [1..(P-1)/2] do
D:=(One(F)*a)^-2*AS;
if D = AS then
Add(stab1,One(F)*MyCutVector([1,0,0,0,1,0,0,0,1], 3));
Add(stab2,One(F)*MyCutVector([a^2,0,0,a^2], 2));
fi;
D:=(One(F)*a)^-2*AS1;
if D = AS then
Add(stab1,BB1);
Add(stab2,a^2*C1);
fi;
D:=(One(F)*a)^-2*AS2;
if D = AS then
Add(stab1,BB2);
Add(stab2,a^2*C2);
fi;
od;
y3:=IntFFE(AS[1][1]);
y4:=IntFFE(AS[1][2]);
y5:=IntFFE(AS[2][1]);
y6:=IntFFE(AS[2][2]);
for y1 in [0..P-1] do
for y2 in [0..P-1] do
A:=One(F)*MyCutVector([y1,y2,y3,y4,y5,y6], 3);
if A = 0*A then
Add(params[24],[0,0,0,0,0,0,s]);
continue;
fi;
new:=1;
index:=P*y1+y2;
for ii in [1..Length(stab1)] do
B:=stab1[ii];
C:=stab2[ii];
D:=B*A*C^-1;
z1:=IntFFE(D[1][1]);
z2:=IntFFE(D[1][2]);
ind1:=P*z1+z2;
if ind1 < index then new:=0; fi;
if new = 0 then break; fi;
od;
if new = 1 then
Add(params[24],[y1,y2,y3,y4,y5,y6,s]);
fi;
od;
od;
od;
if Length(params[24]) <> 2*(P^5+P^4+P^3+P^2)/3+2*P+3 then
Error("params[24] wrong"); fi;
fi;
if case = 24 then return params[24]; fi;
fi;
if Sum(List(params, Length))<> 2*P^5+7*P^4+19*P^3+49*P^2+128*P+256
+(P^2+7*P+29)*Gcd(P-1,3)+ (P^2+7*P+24)*Gcd(P-1,4)+(P+3)*Gcd(P-1,5) then
Error("sum is wrong");
fi;
for i in [1..Length(params)] do
if not Length(params[i]) = Length(Set(params[i])) then
Error("params ",i," has duplicates");
fi;
if not IsSubset( [0..P-1], Set(Flat(params[i]))) then
Error("params ",i," is out of range");
fi;
od;
return params;
end );
BindGlobal( "ValsFunction28", function(P, case)
local vals, i;
vals := ValsPreFunction28(P, case);
if IsInt(case) and case < 24 then
return List(vals, x -> [x[4], x[5], x[6], x[1], x[2], x[3]]);
elif IsInt(case) and case = 24 then
return List(vals, x -> [x[4], x[5], x[6], x[1], x[7], x[2], x[3]]);
else
for i in [1..23] do
vals[i] := List(vals[i], x->[x[4],x[5],x[6],x[1],x[2],x[3]]);
od;
vals[24] := List(vals[24], x->[x[4],x[5],x[6],x[1],x[7],x[2],x[3]]);
return vals;
fi;
end );
[ Dauer der Verarbeitung: 0.47 Sekunden
(vorverarbeitet)
]
|
2026-04-02
|