minpoly([-5,0,-1,1;0,-5,-1,-1;1,1,-5,0;-1,1,0,-5])
minpoly([-5,0,-1,1;0,-5,-1,-1;1,1,-5,0;-1,1,0,-5]/3)
minpoly([-5,0,-1,1;0,-5,-1,-1;1,1,-5,0;-1,1,0,-5]/a)
minpoly([-5,0,-1,1;0,-5,-1,-1;1,1,-5,0;-1,1,0,-5]*a)
matsnf([1,2;3,4],2)
matsnf([-X-5,-1,-1,0;0,X^2+10*X+26,-1,-X-5;1,-X-5,-X-5,1;-1,0,0,1],2)
minpoly([a+4/51*d,29/51*d,55/17*d,-9/17*d;-11/51*d,a+35/51*d,-11/17*d,12/17*d;23/51*d,1/51*d,a+6/17*d,-5/17*d;11/17*d,16/17*d,33/17*d,a-19/17*d])

D=[36,12,2];
snfrank(D, 2)
snfrank(D, 4)
snfrank(D, 8)
snfrank(D, 3)
snfrank(D, 0)
snfrank(D)
p=2^64+13;
D=[6*p^3, 2*p^2, p^2, p, 1];
snfrank(D, p^3)
snfrank(D, p^2)
snfrank(D, p)
D=matsnf([-x-5,-1,-1,0; 0,x^2+10*x+26,-1,-x-5; 1,-x-5,-x-5,1; -1,0,0,1]);
snfrank(D, x^2 + 10*x + 27)
A=matdiagonal([x-1,x^2+1,x-1,(x^2+1)^2,x,(x-1)^2]); D=matsnf(A);
snfrank(D,x-1)
snfrank(D,(x-1)^2)
snfrank(D,(x-1)^3)
snfrank(D,x^2+1)
snfrank([0,12,1,1])
snfrank([0,12,1,1], 2)
snfrank([0,x,1,1])
snfrank([0,x,1,1], x)

checkfrobenius(M)=
{
  my([F,B] = matfrobenius(M,2));
  if(M!=B^-1*F*B, error("matfrobenius:",M));
  F
}
{
  for(i=1,15,
      print(checkfrobenius(matrix(i,i,k,j,k>=j))));
  for(i=1,10,
     print(checkfrobenius(matpascal(i))));
  for(i=1,8,
     print(checkfrobenius(mathilbert(i))));
}
matsnf(matdiagonal([x,0,x]), 2)
matsnf(matdiagonal([1+x,0,x]), 2)
\\Bug #1208
matsnf([0;1;2], 4)
matsnf([0;1;2], 5)
matsnf(Mat([0,1,2]), 4)
matsnf(Mat([0,1,2]), 5)

m=[2*x^6+x^5+2*x^4+2*x^3+x^2+2*x+2,2*x^5+x^3+2*x^2+2,x^3+x^2+x;2*x^6+x^3+x+2,2*x^5+2*x^4+x^3+2*x,x^3+2*x^2+2*x;2*x^6+x^4+x^3+2*x^2+2,2*x^5+2*x^4+2*x^3+x^2+2,x^3+2*x^2+x+2];matsnf(m*Mod(1,3), 2)

m=[1,0,0,1,1,1,1,1,0;1,0,0,1,1,0,1,0,0;0,0,0,0,1,0,0,1,0;0,0,0,0,1,1, 0,0,1;0,1,0,0,0,1,1,0,1;1,1,1,0,0,0,1,1,0;0,0,1,0,0,1,0,1,1;0,0,1,1,1,1,0,1,0;0, 1,0,0,0,0,1,1,0]*1.;
round(matfrobenius(m))
round(minpoly(m))

m=[27,0;0,3;1,1;0,0];
v=matsnf(m,1+4)
snfrank(v,3)
v=matsnf(m,1)
snfrank(v,3)

a=[32,16,8,4,8,16,4,4,8,4,4,16,0,4,8,0,28,12,16,4,20,6,4,14,30,18,20,24,22,0,0,0,0,0,0,0,10,0,9,18,26,9,20,26,27,18,3,4,19,21,23,19,11,7,18,10,28,31,26,3,31,7,19,11,25,27,13,31,9,5,9,31,3,24,14,1,0,16;0,16,0,4,0,8,0,2,0,0,0,8,0,0,0,0,10,0,12,0,6,0,12,0,10,10,12,14,14,2,2,2,0,0,0,0,12,2,14,0,6,14,4,0,14,5,2,11,6,8,2,3,14,11,13,0,6,11,5,14,2,0,4,3,8,3,3,3,0,8,10,11,6,6,12,12,14,5;0,0,8,4,0,0,4,4,0,4,0,0,2,4,0,0,6,4,4,0,4,4,6,6,6,0,4,2,2,2,0,0,2,2,0,0,6,2,1,6,2,1,4,4,0,6,4,3,5,6,6,7,5,6,0,6,2,3,2,5,1,1,4,7,6,2,7,4,3,7,5,3,3,6,3,3,4,0;0,0,0,4,0,0,0,2,0,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,2,0,0,2,2,2,0,0,0,0,0,2,0,0,2,0,0,0,3,1,3,2,1,1,2,3,3,2,3,2,2,0,2,0,0,1,0,0,3,1,0,0,3,1,0,2,3,3,0,0,2,0;0,0,0,0,8,0,4,0,0,0,4,0,2,0,0,2,4,4,0,4,4,2,6,6,6,2,4,4,4,2,0,0,2,2,0,0,2,2,0,4,6,0,6,2,6,3,3,6,4,1,0,4,0,4,1,1,2,3,1,1,6,1,6,5,4,2,5,1,5,6,3,6,0,6,4,3,0,4;0,0,0,0,0,8,0,2,0,0,0,0,0,0,0,0,6,0,6,0,6,0,2,0,6,6,0,0,2,0,0,0,0,0,0,0,4,0,7,0,4,7,4,0,7,6,5,5,4,5,6,3,6,3,1,7,3,5,6,6,6,1,5,1,4,7,7,4,0,7,2,0,2,4,4,3,4,6;0,0,0,0,0,0,4,0,0,0,0,0,2,0,0,2,0,2,2,0,0,2,0,0,0,0,0,2,2,0,0,0,0,0,0,0,2,0,3,0,2,3,2,0,2,1,2,2,2,2,2,0,2,3,3,0,3,1,2,0,3,1,1,1,3,1,2,1,1,3,2,0,2,0,1,1,0,0;0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,1,0,0,1,0,1,0,0,0,1,1,1,1;0,0,0,0,0,0,0,0,8,4,4,0,2,0,0,0,4,0,2,0,0,4,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,6,0,2,6,2,6,3,7,4,5,0,4,7,4,5,5,4,2,4,3,1,6,0,1,6,6,1,3,5,7,3,1,1,0,5,1,0,5,4;0,0,0,0,0,0,0,0,0,4,0,0,2,0,0,0,0,2,0,0,2,0,0,0,0,0,2,2,2,2,0,0,2,2,0,0,0,2,0,2,2,0,2,2,3,3,3,3,1,2,3,2,3,1,3,3,2,3,1,3,3,2,1,2,3,3,3,3,2,1,1,2,1,2,3,1,3,2;0,0,0,0,0,0,0,0,0,0,4,0,2,0,0,0,2,0,2,0,2,2,2,2,2,0,2,2,2,2,0,0,2,2,0,0,0,2,3,0,2,3,0,0,3,0,2,2,0,0,3,3,0,1,3,0,0,2,2,0,2,3,0,3,1,2,0,1,2,1,3,3,2,2,1,2,3,2;0,0,0,0,0,0,0,0,0,0,0,8,0,4,0,0,0,0,0,4,6,6,4,2,2,0,6,4,4,2,2,2,0,0,0,0,0,2,5,0,2,5,0,4,5,0,6,2,1,4,6,4,3,2,1,2,7,5,3,5,4,6,0,0,0,7,3,5,7,1,1,1,7,2,0,1,0,6;0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,1,0,0,1,1,1,1,0,0,0,1,1,0,0,1,0,0,0,1,1,1,1,1,1,0,0,0,0,1;0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,2,0,0,2,2,2,0,0,0,2,2,2,2,2,0,0,0,0,0,2,1,0,0,1,0,2,0,1,0,3,2,0,3,2,2,2,0,0,1,0,0,3,0,2,0,1,0,2,0,0,2,0,0,2,1,0,1,2,1,1;0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,2,0,6,0,0,2,0,6,2,2,2,2,6,6,0,0,0,0,0,0,0,4,0,4,4,0,4,0,4,4,1,6,1,2,3,3,3,1,4,5,3,6,6,3,3,1,5,2,5,7,1,7,6,3,4,6,2,3,2,7,0,5,6;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,0,1,0,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,1,0,1,0,1,1,0,0,1,0,0,1,1,0,1,0,1,1,1,1,0,1,1,0,1,0,1,0,0,1,1;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,1,1,1,1,0,0,1,0,0,1,1,1,1,1,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,1,1,1;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,0,0,0,1,0,0,0;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,2,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,2,3,0,2,2,3,3,2,2,1,1,1,3,0,3,1,1,0,3,2,1,2,0,3,3,1,3,3,1,1,1,0,3,2,1,0,1,2;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,0,0,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,0,0,0,0;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,0,0,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,0,0,1,0,1,0,1;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,1,0,1,0,0,1,1;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,0,0,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,0,1,0,1,1,1,1,1,0,0,1,1,1,0;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,0,1,1,0,0,0,0,1;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,0,1;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,1,0,1,0,1,1,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,0;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,1,1,0,1,1;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,1,0,1,0,0,1,0,1,1,1,0,1,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,0,0;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,24,24,8,8,4,8,6,24,10,2,4,2,0,4,2,0,20,12,31,3,11,22,26,27,5,12,0,16,3,23,27,5,25,17,2,24,28,11,28,14,22,16,23,20,15,4,16,17;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,6,0,0,0,4,4,6,0,4,4,1,4,0,4,2,2,4,1,7,7,5,4,5,7,2,1,7,1,5,3,3,6,4,5,5,7,4,6,6,4,5,6;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,4,0,0,0,2,0,0,2,0,2,6,2,7,5,4,2,2,3,2,6,6,6,2,3,0,7,0,7,0,0,3,0,6,7,3,4,1,1,3,7,6,2,2,1;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,6,4,0,6,6,0,0,2,0,3,1,3,2,7,1,5,5,7,2,3,3,3,3,6,7,1,2,5,4,3,4,3,1,7,1,6,0,3;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,4,0,4,0,2,2,6,2,6,4,4,6,0,3,1,2,4,6,0,3,1,5,1,7,2,4,1,5,5,1,4,0,7,0,2,7,2,0,1,5,7,3,1,5;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,2,0,0,2,0,2,2,0,3,1,2,2,0,3,2,2,2,0,0,3,0,1,0,1,2,0,3,2,2,3,1,2,2,0,3,3,1,1,0,3;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,6,0,4,2,4,4,0,4,0,6,0,6,3,1,1,2,4,1,7,1,1,5,7,3,4,0,5,6,3,4,0,0,3,1,1,0,6,1,6,7,1,6;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,1,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,1;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,6,0,2,6,1,6,7,7,2,0,7,2,1,3,0,0,0,3,7,3,1,4,3,0,0,0,6,7,0,4,0,3,7,6,0,0,7,7;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,2,3,1,1,3,0,3,1,2,0,2,3,0,1,2,2,0,3,0,1,3,2,2,3,1,1,2,3,2,1,0,3,3,0;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,1,1,1,0,0,0,0,1,1,0,1,0,1,1,1,1,1,1,0,1,1,0;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,0,0,1,0,0,1,1,0,0,0,1,0,1,0,1;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,2,2,3,0,0,3,0,3,0,2,0,2,2,3,1,2,1,1,3,0,0,1,2,2,1,3,0,2,0,0,1,0,1,0,2;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,1,1,0,0,1,1,1,0,1,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,1,0,1,1,1,0,1,0,1,0;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,1,0,0,0,1,0,0,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0,1,0,1,1,1,1,1,1,0;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,6,6,6,6,2,6,6,0,0,0,0,0,0,0,0,4,4,0,4,4,0,0,0,0,0,4,3,0,5,0,5,0,1;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,4,4,0,0,2,4,6,2,2,2,2,4,0,0,0,2,4,3,1,4,4,0,0,6,1;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,2,2,0,2,2,0,0,2,2,2,0,0,0,0,2,1,2,2,0,3,3,1,3;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,2,2,2,0,0,2,0,0,0,2,2,2,0,1,0,2,2,3,3;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,0;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,2,2,2,2,2,2,2,0,0,0,1,1,2,1,3,1,1;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1,0,1,0,1,1,0;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0,0,1,0,0,0;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,1,0,0,1,1,1,0,1;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,1,1,1,0,0,0,1;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1,1,0;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,2,1,3,0,1,0,3,2,3;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,1,0,1,0,1,0,1;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,2,0,0;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0;0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2];
matsnf(a)
default(parisize,"88M"); \\ overflows 86M in 32bit
[u,v,d] = matsnf(a,1); u*a*v == d
