test() = {
  print(a*b);
  print(a/b);
  print(sqr(a));
  print(a^-1);
  print(a^3);
  print(a^0);
}

T=2*x^2 + x + 1; a = Mod(x+1/2, T); b = Mod(x/3+1, T);
test();

T=2*x^3 + x + 1; a = Mod(x^2+x+1/2, T); b = Mod(x^2+x/3+1, T);
test();

modp(p) = {
  t = T*Mod(1,p);
  a = Mod((x^2+x+3) * Mod(1,p), t); b = Mod((3*x^2+2*x+5) * Mod(1,p), t);
}
modp(17); test();
modp(18446744073709551629); test();
(Mod(1/2, 't)*'x + Mod(1, 't)) ^ 2
Mod(Mod(x,x^2+1),x)
Mod(y,x)
Mod(1/y,x)
Mod(O(y),x)
Mod(x,y)
Mod(1/x,y)
Mod(1+O(y),y)
Mod(1+O(y),y+1)

modreverse(Mod(0,Pol(1)))
modreverse(Mod(1,x+1))
norm(Mod(2^65,3*x+1))
norm(Mod('a,3*x+1))
