N := 2^5*193;
bound := 3000;

   F<alp> := GF(25);
   G<a2,b2,c>:=DirichletGroup(N, F);
   assert Order(a2) mod 2 eq 0;
   assert Order(c) mod 3 eq 0;

// This doesn't work: space has dimension 0.
//   eps := a2^(Order(a2) div 2) * (c^(Order(c) div 3));
// This doesn't work -- it's not odd.
//   eps := b2^(Order(b2) div 2) * (c^(Order(c) div 3));
   eps := a2^(Order(a2) div 2) * b2^(Order(b2) div 2) * (c^(Order(c) div 3));

   time M := ModularSymbols(eps,5,+1);
   "Created M = ", M;

   R<x>:= PolynomialRing(F);
   I := [<17,x>, <53,x>, <59,x>, <71, x>, <73, x>, <97, x>];
   time V := Kernel(I, M);
   "Created V = ", V;
   save "6176.space";

   if Dimension(V) ne 2 then
      error "Dimension of V is not 2.";
   end if;
   
printf "Computing T_2, T_3, T_5, ..., T_%o.\n", PreviousPrime(bound+1);
time T := [DualHeckeOperator(V,p) : p in [2..bound] | IsPrime(p)];

file := Open(IntegerToString(N) cat ".Tp", "w");
fprintf file, "F<alp> := GF(%o);\n", #F;
fprintf file, "T%o := \n %m;\n", N, T;

print "All done!";
