+#include <iostream>
+#include <vector>
+using namespace std;
+
+const bool do_test = true; // set to true in order to run this beast
+
+static unsigned test()
+{
+ // same matrix as in test P:
+ const unsigned n = 10;
+ matrix m(n*n+1,n*n+1);
+ for (unsigned i=1; i<=n*n; ++i)
+ m.set(i-1,i-1,1);
+ for (unsigned i=1; i<=n*n; ++i)
+ if (!(i%n))
+ m.set(i-1,n*n,1);
+ for (unsigned i=1; i<=n*n; ++i)
+ if (!((i-1)%n))
+ m.set(n*n,i-1,n-(i-1)/n);
+ for(unsigned i=1; i<=n; ++i)
+ for (unsigned j=1; j<=n; ++j)
+ if (i-j)
+ for (unsigned k=1; k<n; ++k)
+ m.set((i-1)*n+k-1,(j-1)*n+k,n+1-j);
+
+ symbol lambda("lambda");
+ ex cp = m.charpoly(lambda);
+
+ if (cp.coeff(lambda,96) != numeric("75287520")) {
+ clog << "characteristic polynomial miscalculated as " << cp << endl;
+ return 1;
+ }
+ return 0;
+}
+
+unsigned time_lw_Q()