ALPHABET := {@ "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L",
     "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" @};

function facdata(N)
   t0 := Cputime();
   ans := [* *];
   M := ModularSymbols(Gamma1(N),2,0);
   S := NewSubspace(CuspidalSubspace(M));
   D := TraceSortDecomposition(NewformDecomposition(NewSubspace(S)));
   for i in [1..#D] do
      t := Cputime();
      A := D[i];
      label := Sprintf("%o%o",N,ALPHABET[i]);
      dim := Dimension(A) div 2;
      ord := Order(DirichletCharacter(A));
      L := LRatio(A,1);
      torbound := TorsionBound(A,60);
      modker := Invariants(ModularKernel(A));
      Append(~ans,[* "\""*label*"\"", dim, ord, L, torbound, modker, Cputime(t) *]);
   end for;
   Append(~ans, [* Sprintf("\"J_1(%o)\"",N), Dimension(S) div 2, 0, LRatio(S,1), TorsionBound(S,60), 0, Cputime(t0) *]);
   return ans;
end function;

ans := facdata(arg);
ans;
