F:=MatrixRing(Rationals(),24) ! F;
w7:=MatrixRing(Rationals(),24) ! w7;
al:=MatrixRing(Integers(),24) ! (1/2*(1+w7));
bl:=MatrixRing(Integers(),24) ! (1/2*(1-w7));
L:=LatticeWithGram(F);
SL:=ShortestVectors(L);
max:=2*#SL;

OO:=[SL[1]];
O:=Orbit(G,SL[1]); 
Laenge:=[#O];
for i in [1..#SL] do 
v:=SL[i]; 
if not v in O then 
  Append(~OO,v);
  o:=Orbit(G,v); 
  Append(~Laenge,#o);
  O:=O join o; 
if #O ge max then break; 
end if;
end if;
end for;



null:=MatrixRing(Integers(),24) ! 0;
zwei:=MatrixRing(Integers(),24) ! 2;
eins:=MatrixRing(Integers(),24) ! 1;
FF:=DiagonalJoin(F,F);
Lambda48:=LatticeWithGram(1/2*FF);
HH:=HorizontalJoin(bl,bl);
NZ:=HorizontalJoin(null,zwei);
L48:=VerticalJoin(HH,NZ);
D48:=MatrixRing(Rationals(),48) ! L48 ^(-1);
D48 := MatrixRing(Integers(),48) ! (Transpose(2*D48));

Git48:=sub<Lambda48 | L48>; 
Gt48:=Dual(Git48:Rescale:=false);
Git48 subset Gt48;


FFF:=DiagonalJoin(F,FF);
Lambda72:=LatticeWithGram(1/2*FFF);

H:=HorizontalJoin(al,al);
Hal:=HorizontalJoin(H,al);
Hbet:=HorizontalJoin(null,HH);
betH:=HorizontalJoin(HH,null);
EA:=HorizontalJoin(eins,al);
EE:=HorizontalJoin(eins,eins);
EEa:=HorizontalJoin(EE,al);
NNZ:=HorizontalJoin(null,NZ);
L72:=VerticalJoin(EEa,Hbet);
L72:=VerticalJoin(L72,NNZ);
G72:=sub<Lambda72 | L72 >; 
Determinant(G72);

gesamt:=0;

for i in [1..#OO] do 
o:=RMatrixSpace(Integers(),1,24) ! Eltseq(OO[i]);
v:=o*EA;
ov:=HorizontalJoin(o,v); 
Lambda72 ! Eltseq(ov) in G72; 

L:=sub<Gt48 | Lambda48 ! Eltseq(v), L48>; 


S:= ShortVectors(L,2,4);
print "Bahnlaenge,Anzkurz",Laenge[i],#S; 
gesamt +:= #S*Laenge[i];

end for;
print gesamt;
