Commit 6ccc0672 authored by QuentinH's avatar QuentinH
Browse files

a

parent 2b12d3b3
......@@ -6,7 +6,7 @@ CFLAGS += -fopenmp
LDFLAGS += -fopenmp
LDLIBS += -lm
all: macaulay_gen lanczos reconstruct_monomials
all: macaulay_gen lanczos reconstruct_monomials test_parser_main test_polynomial_main
lanczos.o: CFLAGS += -flax-vector-conversions
monica: parser.o monica.o
......@@ -19,13 +19,19 @@ macaulay_gen: parser.o tools.o tools_parser.o monomials.o macaulay_gen.o
macaulay_gen: LDLIBS += `pkg-config --libs m4ri`
reconstruct_monomials: parser.o tools.o tools_parser.o monomials.o reconstruct_monomials.o
reconstruct_monomials: LDLIBS += `pkg-config --libs m4ri`
monomial_new_test: tools.o monomial_new.o monomial_new_test.o
test_parser_main: tools_parser.o monomials.o tools.o parser.o test_parser_main.o
test_polynomial_main: tools_parser.o monomials.o tools.o parser.o polynomial.o test_polynomial_main.o
#test: parser.o tools.o tools_parser.o monomials.o test.o
#test: LDLIBS += `pkg-config --libs m4ri`
parser.o: parser.h
tools.o: tools.h
monomials.o: monomials.h tools.h
polynomial.o: polynomial.h tools.h tools_parser.h monomials.h
tools_parser.o: tools_parser.h monomials.h tools.h
monomial_new.o: tools.h monomial_new.h
macaulay_gen.o: parser.h tools_parser.h tools.h monomials.h
macaulay_gen.o: CFLAGS += `pkg-config --cflags m4ri`
......@@ -33,9 +39,16 @@ macaulay_gen.o: CFLAGS += `pkg-config --cflags m4ri`
reconstruct_monomials.o: parser.h tools_parser.h tools.h monomials.h
reconstruct_monomials.o: CFLAGS += `pkg-config --cflags m4ri`
monomial_new_test.o:tools.h monomial_new.h
test_parser_main.o: tools_parser.h monomials.h tools.h parser.h
test_polynomial_main.o: tools_parser.h monomials.h tools.h parser.h polynomial.h
#test.o: parser.h tools_parser.h tools.h monomials.h
#test.o: CFLAGS += `pkg-config --cflags m4ri`
clean:
rm -rf *.o my_mat/ *log.bin
rm -f parser_demo moebius_demo parser_demo_alt monica monica_vector macaulay_gen lanczos reconstruct_monomials test
rm -f parser_demo moebius_demo parser_demo_alt monica monica_vector macaulay_gen lanczos reconstruct_monomials test test_parser_main
File added
......@@ -3,30 +3,25 @@
#include "tools_parser.h"
#include "tools.h"
// #include "monomials.h"
#include "monomial_new.h"
// int convert_gray_code(int n)
// {
// return n ^ (n >> 1);
// }
struct polynomial_system {
int n; /* # variables */
int v; /* # linear variables */
char ** variable_name; /* array of strings, size n */
int D; /* max degree of any monomial */
int m; /* # polynomials */
bool ** poly; /* array of polynomials, size m */
struct monomial_ctx_t * mono; /* description of the monomials */
};
#include "enum.h"
struct matrix_system {
int row;
int col;
int n; /* # of monomials */
bool **A; /* A[row*col][n] */
bool **B; /* B[row*1][n] */
struct monomial_ctx_t *mono;
};
// This function still need to be tested
// Give A matrix values with monomial sol input
bool **update_mat(bool **poly, monomial_t sol, struct polynomial_system *poly_sys)
bool **update_mat_A(bool **poly, monomial_t sol, struct polynomial_system *poly_sys)
{
bool **res;
// Aloccate res
// Alloccate res
res = malloc(sizeof(bool *)* poly_sys->m);
for (int i = 0; i < poly_sys->m; i++)
res[i] = malloc(sizeof(bool) * poly_sys->v);
......@@ -55,13 +50,67 @@ bool **update_mat(bool **poly, monomial_t sol, struct polynomial_system *poly_sy
return res;
}
//TODO
monomial_t solve(monomial_t sol, struct polynomial_system *poly_sys)
bool *update_mat_B(bool **poly, monomial_t sol, struct polynomial_system *poly_sys)
{
bool *res;
res = malloc(sizeof(bool)* poly_sys->m);
for (int i = 0; i < poly_sys->m; i++)
{
// check if there is 1 in polynome
bool cur = poly[i][0];
for (int j = 1; j < monomial_rank_degD(poly_sys->n, poly_sys->mono); j++)
{
if (poly[i][j] == 1)
{
if (monomial_gcd(sol, monomial_unrank(poly_sys->mono, j) == sol))
cur ^= 1;
}
}
res[i] = cur;
}
return res;
}
monomial_t bool_to_mono(bool *arr, int length)
{
monomial_t ans = 0;
for (int i = 0; i < length; i++)
{
ans <<= 1;
ans ^= arr[i];
}
return ans;
}
monomial_t test_sol(monomial_t sol, struct polynomial_system *poly_sys)
{
if (sol == -1)
return -1;
bool **new_A = update_mat_A(poly_sys->A, sol, poly_sys);
bool *new_B = update_mat_B(poly_sys->B, sol, poly_sys);
// solve from pdg.c
bool *new_sol = solve(new_A, new_B, poly_sys->m, poly_sys->v);
bool tmp = check_ans(new_A, new_B, poly_sys->m, poly_sys->v, new_sol);
return;
// Free A and B
for (int i = 0; i < poly_sys->m; i++)
free(new_A[i]);
free(new_A);
free(new_B);
// bad solution
if (tmp == 0)
return -1;
return bool_to_mono(tmp, poly_sys->v);
}
monomial_t enum_recur(monomial_t a, int b, int v, struct polynomial_system *poly_sys)
......@@ -73,9 +122,9 @@ monomial_t enum_recur(monomial_t a, int b, int v, struct polynomial_system *poly
monomial_t sol1 = enum_recur(a, 0, v-1, poly_sys);
monomial_t sol2 = enum_recur(a, 1, v-1, poly_sys);
monomial_t tmp = solve(sol1, poly_sys);
monomial_t tmp = test_sol(sol1, poly_sys);
if (tmp == -1)
tmp = solve(sol2, poly_sys);
tmp = test_sol(sol2, poly_sys);
return tmp;
}
......@@ -96,10 +145,6 @@ monomial_t enumerate(struct polynomial_system *poly_sys)
int main()
{
// for (int n = 0; n < 16; n++)
// {
// printf("n = %d, ng = %d\n", n, convert_gray_code(n));
// }
printf("%d\n", 1 << 1);
return 0;
}
\ No newline at end of file
#include "monomial_new.h"
struct polynomial_system {
int n; /* # variables */
int v; /* # linear variables */
char ** variable_name; /* array of strings, size n */
int D; /* max degree of any monomial */
int m; /* # polynomials */
bool ** poly; /* array of polynomials, size m */
bool **A;
bool **B;
struct monomial_ctx_t * mono; /* description of the monomials */
};
bool **update_mat(bool **poly, monomial_t sol, struct polynomial_system *poly_sys);
monomial_t enumerate(struct polynomial_system *poly_sys);
\ No newline at end of file
x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31
# planted solution: (0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0)
x0*x4 + x0*x5 + x0*x7 + x0*x10 + x0*x11 + x0*x14 + x0*x16 + x0*x20 + x0*x21 + x0*x22 + x0*x25 + x0*x30 + x0*x31 + x0 + x1*x3 + x1*x8 + x1*x10 + x1*x11 + x1*x12 + x1*x14 + x1*x16 + x1*x18 + x1*x19 + x1*x20 + x1*x21 + x1*x22 + x1*x30 + x2*x3 + x2*x4 + x2*x7 + x2*x8 + x2*x9 + x2*x10 + x2*x13 + x2*x16 + x2*x19 + x2*x22 + x2*x23 + x2*x26 + x2*x28 + x2*x29 + x2*x31 + x3*x6 + x3*x12 + x3*x20 + x3*x21 + x3*x23 + x3*x27 + x3*x29 + x3*x31 + x3 + x4*x7 + x4*x10 + x4*x11 + x4*x13 + x4*x14 + x4*x15 + x4*x21 + x4*x23 + x4*x26 + x4*x27 + x4*x30 + x4*x31 + x5*x6 + x5*x7 + x5*x10 + x5*x15 + x5*x16 + x5*x17 + x5*x18 + x5*x20 + x5*x24 + x5*x30 + x5*x31 + x5 + x6*x7 + x6*x10 + x6*x11 + x6*x13 + x6*x14 + x6*x19 + x6*x21 + x6*x22 + x6*x24 + x6*x26 + x6*x27 + x6*x29 + x6 + x7*x9 + x7*x10 + x7*x11 + x7*x12 + x7*x13 + x7*x15 + x7*x16 + x7*x17 + x7*x18 + x7*x19 + x7*x22 + x7*x23 + x7*x24 + x7*x27 + x7*x31 + x8*x9 + x8*x12 + x8*x13 + x8*x14 + x8*x15 + x8*x17 + x8*x18 + x8*x19 + x8*x20 + x8*x23 + x8*x24 + x8*x25 + x8*x27 + x8*x28 + x8*x29 + x8*x31 + x8 + x9*x10 + x9*x12 + x9*x14 + x9*x15 + x9*x16 + x9*x17 + x9*x18 + x9*x19 + x9*x20 + x9*x21 + x9*x24 + x9*x25 + x9*x26 + x9*x27 + x9*x28 + x9*x31 + x9 + x10*x11 + x10*x12 + x10*x13 + x10*x15 + x10*x17 + x10*x18 + x10*x19 + x10*x21 + x10*x23 + x10*x24 + x10*x26 + x11*x14 + x11*x16 + x11*x17 + x11*x19 + x11*x20 + x11*x21 + x11*x22 + x11*x27 + x11*x28 + x11 + x12*x13 + x12*x14 + x12*x15 + x12*x17 + x12*x19 + x12*x23 + x12*x24 + x12*x25 + x12*x27 + x12*x29 + x12*x31 + x13*x14 + x13*x17 + x13*x18 + x13*x20 + x13*x21 + x13*x24 + x13*x25 + x13*x27 + x13*x28 + x13*x29 + x13*x30 + x14*x16 + x14*x17 + x14*x18 + x14*x19 + x14*x20 + x14*x22 + x14*x25 + x14*x26 + x14*x27 + x14*x28 + x14*x29 + x14*x30 + x14*x31 + x14 + x15*x16 + x15*x17 + x15*x18 + x15*x21 + x15*x23 + x15*x24 + x15*x28 + x15*x29 + x15*x30 + x15*x31 + x16*x19 + x16*x20 + x16*x21 + x16*x23 + x16*x25 + x16*x27 + x16 + x17*x18 + x17*x19 + x17*x20 + x17*x22 + x17*x26 + x17*x28 + x17*x29 + x17*x30 + x18*x19 + x18*x22 + x18*x23 + x18*x24 + x18*x25 + x18*x26 + x18*x27 + x19*x22 + x19*x23 + x19*x25 + x19*x29 + x19*x31 + x19 + x20*x21 + x20*x22 + x20*x24 + x20*x28 + x20*x29 + x20 + x21*x25 + x21*x26 + x21*x27 + x21*x30 + x21 + x22*x23 + x22*x24 + x22*x25 + x22*x26 + x22*x30 + x22*x31 + x22 + x23*x26 + x23*x27 + x23*x29 + x23*x31 + x23 + x24*x25 + x24*x26 + x24*x27 + x24*x30 + x24*x31 + x24 + x25*x26 + x25*x27 + x25*x29 + x25 + x26*x28 + x26*x29 + x26 + x27*x28 + x28*x30 + x28*x31 + x29*x30 + x30*x31 + x30
x0*x2 + x0*x5 + x0*x6 + x0*x8 + x0*x9 + x0*x10 + x0*x13 + x0*x15 + x0*x18 + x0*x19 + x0*x21 + x0*x24 + x0*x25 + x0*x26 + x0*x27 + x0*x28 + x0*x29 + x0 + x1*x2 + x1*x3 + x1*x4 + x1*x6 + x1*x9 + x1*x13 + x1*x14 + x1*x15 + x1*x16 + x1*x19 + x1*x20 + x1*x23 + x1*x28 + x1*x30 + x1*x31 + x1 + x2*x3 + x2*x4 + x2*x11 + x2*x13 + x2*x14 + x2*x16 + x2*x17 + x2*x21 + x2*x22 + x2*x26 + x2*x27 + x2*x28 + x2*x30 + x2*x31 + x3*x4 + x3*x5 + x3*x6 + x3*x7 + x3*x8 + x3*x9 + x3*x10 + x3*x11 + x3*x13 + x3*x14 + x3*x16 + x3*x17 + x3*x18 + x3*x20 + x3*x21 + x3*x22 + x3*x23 + x3*x24 + x3*x25 + x3*x27 + x3*x28 + x3*x30 + x4*x5 + x4*x6 + x4*x8 + x4*x9 + x4*x11 + x4*x12 + x4*x23 + x4*x24 + x4*x25 + x4*x29 + x4*x31 + x5*x7 + x5*x8 + x5*x10 + x5*x11 + x5*x12 + x5*x13 + x5*x15 + x5*x19 + x5*x20 + x5*x21 + x5*x23 + x5*x25 + x5*x27 + x5*x28 + x5*x29 + x5 + x6*x9 + x6*x12 + x6*x13 + x6*x23 + x6*x26 + x6*x27 + x6*x28 + x6*x30 + x6*x31 + x6 + x7*x12 + x7*x17 + x7*x18 + x7*x21 + x7*x22 + x7*x23 + x7*x24 + x7*x25 + x7*x26 + x7*x28 + x7*x30 + x7*x31 + x7 + x8*x9 + x8*x10 + x8*x11 + x8*x16 + x8*x20 + x8*x25 + x8*x27 + x8*x31 + x8 + x9*x11 + x9*x13 + x9*x15 + x9*x16 + x9*x17 + x9*x21 + x9*x24 + x9*x27 + x9*x29 + x9*x31 + x10*x11 + x10*x12 + x10*x17 + x10*x18 + x10*x20 + x10*x22 + x10*x23 + x10*x24 + x10*x25 + x10*x27 + x10*x29 + x11*x12 + x11*x14 + x11*x17 + x11*x18 + x11*x19 + x11*x20 + x11*x24 + x11*x25 + x11*x28 + x11*x29 + x11 + x12*x14 + x12*x15 + x12*x18 + x12*x23 + x12*x24 + x13*x15 + x13*x16 + x13*x17 + x13*x18 + x13*x23 + x13*x24 + x13*x25 + x13*x26 + x13 + x14*x15 + x14*x16 + x14*x18 + x14*x19 + x14*x20 + x14*x22 + x14*x26 + x14*x27 + x14*x28 + x14 + x15*x20 + x15*x21 + x15*x22 + x15*x28 + x15 + x16*x18 + x16*x19 + x16*x20 + x16*x21 + x16*x22 + x16*x24 + x16*x27 + x16*x28 + x17*x18 + x17*x20 + x17*x25 + x17*x27 + x17*x29 + x17*x30 + x17*x31 + x17 + x18*x19 + x18*x20 + x18*x23 + x18*x26 + x18*x27 + x18*x28 + x18*x29 + x18*x30 + x19*x20 + x19*x26 + x19*x27 + x19*x28 + x19*x29 + x19*x30 + x19 + x20*x22 + x20*x24 + x20*x26 + x20*x27 + x20*x28 + x20*x30 + x20*x31 + x21*x25 + x21*x27 + x21*x28 + x21*x30 + x22*x24 + x22*x26 + x22*x28 + x22*x31 + x23*x24 + x23*x28 + x23*x30 + x23*x31 + x24*x25 + x24*x30 + x25*x28 + x25*x29 + x25*x30 + x26*x27 + x26*x28 + x26*x29 + x27*x28 + x27*x31 + x27 + x29*x30 + x29 + x30*x31
x0*x1 + x0*x4 + x0*x7 + x0*x8 + x0*x12 + x0*x13 + x0*x14 + x0*x17 + x0*x20 + x0*x21 + x0*x26 + x0*x27 + x0*x28 + x0*x29 + x0*x31 + x1*x8 + x1*x9 + x1*x12 + x1*x13 + x1*x14 + x1*x18 + x1*x19 + x1*x21 + x1*x22 + x1*x24 + x1*x25 + x1*x27 + x1 + x2*x3 + x2*x7 + x2*x14 + x2*x15 + x2*x16 + x2*x17 + x2*x18 + x2*x19 + x2*x20 + x2*x22 + x2*x23 + x2*x25 + x2*x26 + x2*x27 + x3*x5 + x3*x6 + x3*x7 + x3*x8 + x3*x10 + x3*x11 + x3*x12 + x3*x18 + x3*x20 + x3*x21 + x3*x22 + x3*x23 + x3*x27 + x3*x30 + x3*x31 + x3 + x4*x5 + x4*x7 + x4*x8 + x4*x12 + x4*x14 + x4*x15 + x4*x16 + x4*x17 + x4*x18 + x4*x23 + x4*x25 + x4*x26 + x4*x31 + x4 + x5*x13 + x5*x15 + x5*x16 + x5*x20 + x5*x21 + x5*x26 + x5*x31 + x5 + x6*x7 + x6*x8 + x6*x9 + x6*x14 + x6*x16 + x6*x18 + x6*x19 + x6*x21 + x6*x23 + x6*x26 + x6*x27 + x6*x30 + x6 + x7*x8 + x7*x13 + x7*x14 + x7*x15 + x7*x17 + x7*x20 + x7*x22 + x7*x23 + x7*x27 + x7*x29 + x7 + x8*x12 + x8*x16 + x8*x18 + x8*x20 + x8*x22 + x8*x24 + x8*x25 + x8*x26 + x8*x27 + x8*x30 + x8*x31 + x9*x12 + x9*x14 + x9*x15 + x9*x17 + x9*x19 + x9*x20 + x9*x22 + x9*x23 + x9*x24 + x9*x27 + x9*x28 + x9*x29 + x9*x31 + x10*x14 + x10*x15 + x10*x16 + x10*x17 + x10*x21 + x10*x23 + x10*x25 + x10*x26 + x10*x29 + x11*x12 + x11*x17 + x11*x18 + x11*x19 + x11*x20 + x11*x21 + x11*x23 + x11*x25 + x11*x27 + x11*x29 + x11 + x12*x16 + x12*x17 + x12*x19 + x12*x20 + x12*x23 + x12*x25 + x12*x26 + x12*x29 + x12*x30 + x12*x31 + x13*x16 + x13*x17 + x13*x18 + x13*x22 + x13*x23 + x13*x24 + x13*x25 + x13*x26 + x13*x28 + x13*x29 + x13*x30 + x14*x16 + x14*x17 + x14*x18 + x14*x26 + x14*x27 + x14*x28 + x14*x29 + x15*x16 + x15*x20 + x15*x22 + x15*x23 + x15*x28 + x15*x30 + x15*x31 + x15 + x16*x17 + x16*x18 + x16*x20 + x16*x21 + x16*x22 + x16*x26 + x16*x27 + x16*x30 + x17*x20 + x17*x21 + x17*x22 + x17*x23 + x17*x24 + x17*x30 + x17 + x18*x19 + x18*x24 + x18*x25 + x18*x26 + x18*x27 + x18*x29 + x18*x31 + x19*x21 + x19*x22 + x19*x25 + x19*x26 + x19*x27 + x19*x29 + x19*x31 + x19 + x20*x22 + x20*x24 + x20*x26 + x20*x29 + x20*x31 + x20 + x21*x23 + x21*x24 + x21*x28 + x21*x29 + x21*x30 + x21*x31 + x22*x23 + x22*x24 + x22*x25 + x22*x26 + x22*x29 + x22*x30 + x23*x24 + x23*x25 + x23*x26 + x23 + x24*x28 + x24*x29 + x24*x30 + x24*x31 + x25*x26 + x25*x28 + x25*x31 + x25 + x26*x27 + x26*x28 + x27*x28 + x27*x29 + x27*x30 + x27 + x28*x29 + x28*x30 + x29*x30 + x29*x31 + x29 + x30*x31 + x31
x0*x1 + x0*x2 + x0*x7 + x0*x9 + x0*x11 + x0*x12 + x0*x14 + x0*x18 + x0*x22 + x0*x24 + x0*x25 + x0*x27 + x0*x28 + x0*x30 + x0*x31 + x1*x3 + x1*x5 + x1*x8 + x1*x13 + x1*x14 + x1*x15 + x1*x21 + x1*x22 + x1*x24 + x1*x27 + x1*x28 + x1*x30 + x2*x3 + x2*x4 + x2*x7 + x2*x8 + x2*x9 + x2*x10 + x2*x11 + x2*x12 + x2*x13 + x2*x17 + x2*x18 + x2*x21 + x2*x23 + x2*x24 + x2*x26 + x2*x27 + x2*x28 + x2*x30 + x3*x5 + x3*x7 + x3*x8 + x3*x9 + x3*x10 + x3*x13 + x3*x14 + x3*x16 + x3*x17 + x3*x21 + x3*x22 + x3*x24 + x3*x26 + x3*x28 + x3*x29 + x3*x31 + x4*x7 + x4*x8 + x4*x9 + x4*x10 + x4*x12 + x4*x14 + x4*x15 + x4*x17 + x4*x21 + x4*x22 + x4*x23 + x4*x24 + x4*x28 + x4*x31 + x5*x7 + x5*x9 + x5*x12 + x5*x13 + x5*x15 + x5*x18 + x5*x22 + x5*x23 + x5*x25 + x5*x27 + x5*x29 + x5*x30 + x6*x8 + x6*x12 + x6*x13 + x6*x14 + x6*x15 + x6*x16 + x6*x19 + x6*x23 + x6*x25 + x6*x26 + x6*x29 + x6 + x7*x8 + x7*x9 + x7*x11 + x7*x12 + x7*x14 + x7*x15 + x7*x16 + x7*x22 + x7*x26 + x7*x27 + x8*x11 + x8*x13 + x8*x18 + x8*x22 + x8*x24 + x8*x29 + x9*x10 + x9*x11 + x9*x12 + x9*x16 + x9*x18 + x9*x19 + x9*x26 + x10*x14 + x10*x16 + x10*x17 + x10*x20 + x10*x21 + x10*x23 + x10*x25 + x10*x27 + x10*x28 + x10*x29 + x10*x31 + x11*x12 + x11*x13 + x11*x17 + x11*x21 + x11*x25 + x11*x30 + x11 + x12*x14 + x12*x15 + x12*x16 + x12*x17 + x12*x19 + x12*x22 + x12*x24 + x12*x28 + x12 + x13*x16 + x13*x21 + x13*x23 + x13*x28 + x13*x29 + x13*x30 + x13 + x14*x16 + x14*x18 + x14*x19 + x14*x20 + x14*x22 + x14*x27 + x14*x28 + x14*x30 + x15*x16 + x15*x19 + x15*x20 + x15*x22 + x15*x23 + x15*x25 + x15*x27 + x15*x29 + x15*x30 + x15*x31 + x16*x19 + x16*x20 + x16*x21 + x16*x23 + x16*x25 + x16*x26 + x16*x29 + x16*x31 + x16 + x17*x20 + x17*x25 + x17*x26 + x17*x28 + x17 + x18*x20 + x18*x22 + x18*x25 + x18*x27 + x18*x29 + x18 + x19*x23 + x19*x24 + x19*x25 + x19*x26 + x19*x29 + x19*x30 + x19*x31 + x19 + x20*x22 + x20*x28 + x20*x30 + x20*x31 + x20 + x21*x23 + x21*x28 + x21*x29 + x21 + x22*x23 + x22*x25 + x22*x26 + x22*x28 + x22*x30 + x22 + x23*x24 + x23*x25 + x23*x26 + x23*x27 + x23*x31 + x23 + x24*x25 + x24*x31 + x25*x27 + x25*x28 + x25*x29 + x25*x30 + x25*x31 + x25 + x26*x27 + x26*x28 + x26*x29 + x26*x31 + x26 + x27*x30 + x27*x31 + x28*x29 + x28 + x30 + x31
x0*x2 + x0*x5 + x0*x6 + x0*x7 + x0*x10 + x0*x12 + x0*x14 + x0*x22 + x0*x23 + x0*x25 + x1*x2 + x1*x3 + x1*x8 + x1*x11 + x1*x13 + x1*x15 + x1*x16 + x1*x20 + x1*x22 + x1*x24 + x1*x25 + x1*x27 + x1*x29 + x1*x30 + x1 + x2*x3 + x2*x4 + x2*x6 + x2*x7 + x2*x8 + x2*x11 + x2*x12 + x2*x14 + x2*x15 + x2*x16 + x2*x18 + x2*x19 + x2*x20 + x2*x21 + x2*x24 + x2*x29 + x2*x30 + x2 + x3*x4 + x3*x5 + x3*x6 + x3*x8 + x3*x14 + x3*x18 + x3*x19 + x3*x20 + x3*x22 + x3*x23 + x3*x27 + x3*x29 + x3 + x4*x7 + x4*x8 + x4*x9 + x4*x10 + x4*x11 + x4*x13 + x4*x14 + x4*x16 + x4*x17 + x4*x18 + x4*x19 + x4*x20 + x4*x21 + x4*x23 + x4*x25 + x4*x27 + x4*x28 + x4*x29 + x4*x31 + x5*x7 + x5*x9 + x5*x10 + x5*x12 + x5*x14 + x5*x15 + x5*x16 + x5*x17 + x5*x22 + x5*x23 + x5*x24 + x6*x8 + x6*x11 + x6*x12 + x6*x13 + x6*x15 + x6*x21 + x6*x22 + x6*x23 + x6*x25 + x6*x26 + x6*x29 + x6*x31 + x7*x8 + x7*x12 + x7*x16 + x7*x17 + x7*x19 + x7*x21 + x7*x22 + x7*x24 + x7*x26 + x7*x27 + x7*x28 + x7*x30 + x7*x31 + x8*x14 + x8*x16 + x8*x21 + x8*x22 + x8*x23 + x8*x24 + x8*x25 + x9*x10 + x9*x11 + x9*x12 + x9*x13 + x9*x15 + x9*x17 + x9*x21 + x9*x25 + x9*x28 + x9*x29 + x10*x11 + x10*x12 + x10*x16 + x10*x17 + x10*x18 + x10*x20 + x10*x22 + x10*x23 + x10*x26 + x10*x27 + x10*x28 + x10*x29 + x10*x30 + x10*x31 + x11*x12 + x11*x13 + x11*x15 + x11*x18 + x11*x19 + x11*x20 + x11*x21 + x11*x22 + x11*x23 + x11*x29 + x11 + x12*x13 + x12*x17 + x12*x18 + x12*x19 + x12*x20 + x12*x21 + x12*x22 + x12*x23 + x12*x24 + x12*x26 + x12*x27 + x12*x30 + x13*x18 + x13*x19 + x13*x20 + x13*x22 + x13*x23 + x13*x24 + x13*x25 + x13*x28 + x13*x30 + x13*x31 + x14*x16 + x14*x18 + x14*x19 + x14*x22 + x14*x23 + x14*x26 + x14*x27 + x14*x29 + x14 + x15*x17 + x15*x18 + x15*x19 + x15*x21 + x15*x22 + x15*x23 + x15*x24 + x15*x25 + x15*x27 + x15*x29 + x15*x30 + x15*x31 + x16*x19 + x16*x22 + x16*x24 + x16*x29 + x16*x31 + x16 + x17*x18 + x17*x19 + x17*x22 + x17*x24 + x17*x28 + x17*x29 + x17*x30 + x17*x31 + x18*x19 + x18*x21 + x18*x23 + x18*x28 + x18*x30 + x18*x31 + x18 + x19*x20 + x19*x24 + x19*x27 + x19*x28 + x19*x31 + x19 + x20*x21 + x20*x24 + x20*x28 + x20 + x21*x22 + x21*x23 + x21*x25 + x21*x30 + x22*x26 + x22*x27 + x22*x28 + x22*x29 + x22 + x23*x25 + x23*x28 + x23*x29 + x23*x31 + x24*x25 + x24*x27 + x24*x29 + x24*x30 + x24*x31 + x24 + x25*x26 + x25*x27 + x25*x29 + x25*x31 + x25 + x26*x29 + x26*x31 + x27*x29 + x27 + x28*x29 + x29*x30 + x29*x31 + x30*x31 + x30
x0*x2 + x0*x6 + x0*x7 + x0*x8 + x0*x16 + x0*x17 + x0*x19 + x0*x27 + x0*x29 + x0*x30 + x1*x3 + x1*x5 + x1*x11 + x1*x12 + x1*x14 + x1*x16 + x1*x17 + x1*x19 + x1*x22 + x1*x23 + x1*x28 + x1*x29 + x1*x30 + x2*x3 + x2*x4 + x2*x5 + x2*x6 + x2*x9 + x2*x10 + x2*x13 + x2*x14 + x2*x15 + x2*x16 + x2*x17 + x2*x18 + x2*x20 + x2*x21 + x2*x23 + x2*x25 + x2*x28 + x3*x4 + x3*x7 + x3*x8 + x3*x13 + x3*x14 + x3*x16 + x3*x17 + x3*x19 + x3*x29 + x3*x30 + x3 + x4*x6 + x4*x7 + x4*x12 + x4*x14 + x4*x16 + x4*x18 + x4*x20 + x4*x23 + x4*x26 + x4*x30 + x4*x31 + x4 + x5*x11 + x5*x12 + x5*x14 + x5*x16 + x5*x17 + x5*x18 + x5*x22 + x5*x24 + x5*x25 + x5*x26 + x5*x28 + x5*x29 + x5*x31 + x6*x7 + x6*x8 + x6*x10 + x6*x13 + x6*x15 + x6*x18 + x6*x19 + x6*x23 + x6*x25 + x6*x26 + x6*x29 + x6*x30 + x7*x13 + x7*x15 + x7*x19 + x7*x23 + x7*x27 + x7*x29 + x7*x31 + x8*x10 + x8*x11 + x8*x12 + x8*x13 + x8*x15 + x8*x19 + x8*x24 + x8*x27 + x8*x29 + x9*x11 + x9*x14 + x9*x17 + x9*x19 + x9*x21 + x9*x29 + x9*x30 + x9*x31 + x10*x12 + x10*x13 + x10*x16 + x10*x17 + x10*x21 + x10*x24 + x10*x26 + x10*x29 + x10*x30 + x11*x12 + x11*x14 + x11*x15 + x11*x17 + x11*x18 + x11*x19 + x11*x20 + x11*x21 + x11*x24 + x11*x26 + x11*x28 + x11*x30 + x11*x31 + x11 + x12*x13 + x12*x14 + x12*x16 + x12*x18 + x12*x19 + x12*x20 + x12*x21 + x12*x22 + x12*x23 + x12*x24 + x12*x27 + x12*x29 + x12*x31 + x12 + x13*x16 + x13*x17 + x13*x20 + x13*x22 + x13*x23 + x13*x24 + x13*x25 + x13*x26 + x13*x28 + x13*x30 + x13*x31 + x13 + x14*x15 + x14*x17 + x14*x19 + x14*x22 + x14*x23 + x14*x24 + x14*x26 + x14*x29 + x14*x30 + x14 + x15*x16 + x15*x18 + x15*x19 + x15*x20 + x15*x21 + x15*x24 + x15*x25 + x15*x28 + x15*x29 + x15*x31 + x16*x18 + x16*x19 + x16*x20 + x16*x22 + x16*x23 + x16*x24 + x16*x25 + x16*x27 + x16*x29 + x16*x31 + x17*x18 + x17*x19 + x17*x20 + x17*x21 + x17*x23 + x17*x25 + x17*x26 + x17*x28 + x17*x29 + x17*x31 + x17 + x18*x19 + x18*x20 + x18*x21 + x18*x22 + x18*x23 + x18*x24 + x18*x25 + x18*x31 + x18 + x19*x22 + x19*x27 + x19*x29 + x19*x30 + x19*x31 + x19 + x20*x22 + x20*x24 + x20*x28 + x20*x30 + x20*x31 + x20 + x21*x23 + x21*x24 + x21*x26 + x21*x27 + x21*x28 + x21*x29 + x21*x30 + x22*x24 + x22*x25 + x22*x26 + x22*x28 + x22*x30 + x22*x31 + x23*x25 + x23*x26 + x23*x30 + x23 + x24*x27 + x24*x29 + x25*x28 + x25*x31 + x26*x27 + x26*x28 + x26*x29 + x27*x29 + x27*x30 + x27 + x28*x31 + x29*x31 + x29 + x30 + x31
x0*x2 + x0*x3 + x0*x5 + x0*x6 + x0*x8 + x0*x9 + x0*x10 + x0*x14 + x0*x15 + x0*x17 + x0*x20 + x0*x23 + x0*x24 + x0*x25 + x0*x26 + x0*x27 + x0*x28 + x0*x29 + x0*x30 + x0*x31 + x0 + x1*x3 + x1*x4 + x1*x6 + x1*x8 + x1*x11 + x1*x14 + x1*x19 + x1*x22 + x1*x23 + x1*x25 + x1*x26 + x1*x27 + x1*x30 + x1*x31 + x1 + x2*x3 + x2*x4 + x2*x5 + x2*x10 + x2*x11 + x2*x14 + x2*x18 + x2*x19 + x2*x20 + x2*x22 + x2*x24 + x2*x26 + x2*x31 + x3*x4 + x3*x5 + x3*x8 + x3*x13 + x3*x14 + x3*x15 + x3*x16 + x3*x24 + x3*x25 + x3*x26 + x3*x27 + x3*x28 + x3*x29 + x3*x30 + x3 + x4*x8 + x4*x10 + x4*x11 + x4*x13 + x4*x15 + x4*x17 + x4*x18 + x4*x19 + x4*x20 + x4*x22 + x4*x24 + x4*x26 + x4*x30 + x4*x31 + x5*x6 + x5*x7 + x5*x12 + x5*x13 + x5*x14 + x5*x16 + x5*x17 + x5*x19 + x5*x20 + x5*x21 + x5*x22 + x5*x24 + x5*x25 + x5*x26 + x5*x28 + x5*x29 + x5*x30 + x5*x31 + x6*x11 + x6*x14 + x6*x15 + x6*x20 + x6*x21 + x6*x23 + x6*x27 + x6*x29 + x6*x30 + x6*x31 + x6 + x7*x10 + x7*x11 + x7*x12 + x7*x13 + x7*x16 + x7*x17 + x7*x18 + x7*x19 + x7*x21 + x7*x23 + x7*x25 + x7*x26 + x7*x28 + x7*x29 + x7*x30 + x7 + x8*x9 + x8*x10 + x8*x15 + x8*x16 + x8*x17 + x8*x19 + x8*x23 + x8*x24 + x8*x26 + x8*x27 + x8*x28 + x8*x31 + x9*x11 + x9*x14 + x9*x16 + x9*x18 + x9*x24 + x9*x29 + x9*x30 + x9 + x10*x12 + x10*x13 + x10*x14 + x10*x16 + x10*x17 + x10*x18 + x10*x19 + x10*x23 + x10*x24 + x10*x25 + x10*x26 + x10*x28 + x10*x29 + x10*x30 + x11*x12 + x11*x17 + x11*x18 + x11*x20 + x11*x21 + x11*x26 + x11*x27 + x11*x28 + x11*x29 + x11*x31 + x11 + x12*x16 + x12*x17 + x12*x22 + x12*x23 + x12*x25 + x12*x26 + x12*x28 + x12*x29 + x12*x31 + x13*x14 + x13*x15 + x13*x17 + x13*x18 + x13*x19 + x13*x20 + x13*x28 + x14*x15 + x14*x16 + x14*x18 + x14*x19 + x14*x20 + x14*x21 + x14*x22 + x14*x23 + x14*x24 + x14*x27 + x14*x30 + x14 + x15*x16 + x15*x18 + x15*x19 + x15*x20 + x15*x23 + x15*x24 + x15*x25 + x15*x26 + x15*x28 + x15*x30 + x16*x17 + x16*x21 + x16*x22 + x16*x24 + x16*x25 + x16*x26 + x16*x27 + x16*x31 + x16 + x17*x18 + x17*x20 + x17*x22 + x17*x23 + x17*x24 + x17*x28 + x17*x29 + x17*x30 + x17 + x18*x20 + x18*x21 + x18*x22 + x18*x23 + x18*x24 + x18*x25 + x18*x28 + x18*x29 + x19*x21 + x19*x22 + x19*x23 + x19*x24 + x19*x25 + x19*x26 + x20*x22 + x20*x27 + x20*x29 + x20*x30 + x21*x24 + x21*x26 + x21*x31 + x21 + x22*x23 + x22*x26 + x22*x27 + x22*x28 + x22*x31 + x23*x24 + x23*x26 + x23*x27 + x23*x28 + x23*x29 + x23*x31 + x23 + x24*x25 + x24*x28 + x24*x30 + x24 + x25*x28 + x25*x29 + x25 + x26*x28 + x26*x29 + x26*x30 + x26*x31 + x26 + x27*x29 + x27*x31 + x28*x29 + x28*x31 + x28 + x29 + 1
x0*x1 + x0*x2 + x0*x3 + x0*x4 + x0*x9 + x0*x10 + x0*x12 + x0*x13 + x0*x16 + x0*x17 + x0*x18 + x0*x21 + x0*x22 + x0*x23 + x0*x24 + x0*x25 + x0*x29 + x0*x30 + x1*x4 + x1*x5 + x1*x6 + x1*x7 + x1*x8 + x1*x9 + x1*x15 + x1*x18 + x1*x19 + x1*x20 + x1*x22 + x1*x23 + x1*x24 + x1*x26 + x1*x27 + x1*x29 + x1*x30 + x2*x5 + x2*x6 + x2*x7 + x2*x10 + x2*x11 + x2*x12 + x2*x15 + x2*x16 + x2*x18 + x2*x22 + x2*x25 + x2*x28 + x2 + x3*x4 + x3*x5 + x3*x6 + x3*x9 + x3*x10 + x3*x11 + x3*x13 + x3*x15 + x3*x16 + x3*x17 + x3*x21 + x3*x25 + x3*x29 + x3*x30 + x3*x31 + x4*x6 + x4*x7 + x4*x9 + x4*x13 + x4*x14 + x4*x17 + x4*x18 + x4*x19 + x4*x21 + x4*x26 + x4*x27 + x4*x28 + x4*x31 + x5*x7 + x5*x11 + x5*x13 + x5*x14 + x5*x18 + x5*x19 + x5*x20 + x5*x23 + x5*x26 + x5*x27 + x5*x28 + x5*x30 + x6*x7 + x6*x11 + x6*x13 + x6*x15 + x6*x16 + x6*x17 + x6*x21 + x6*x22 + x6*x25 + x6*x26 + x6*x27 + x6*x30 + x6*x31 + x7*x8 + x7*x9 + x7*x11 + x7*x12 + x7*x14 + x7*x16 + x7*x17 + x7*x19 + x7*x20 + x7*x21 + x7*x22 + x7*x23 + x7*x24 + x7*x29 + x7*x30 + x7*x31 + x7 + x8*x9 + x8*x12 + x8*x14 + x8*x17 + x8*x18 + x8*x24 + x8*x27 + x8*x29 + x8*x31 + x9*x12 + x9*x13 + x9*x14 + x9*x17 + x9*x20 + x9*x21 + x9*x23 + x9*x26 + x9*x27 + x9 + x10*x11 + x10*x14 + x10*x18 + x10*x19 + x10*x21 + x10*x22 + x10*x23 + x10*x24 + x10*x25 + x10*x27 + x10*x30 + x10 + x11*x13 + x11*x17 + x11*x18 + x11*x20 + x11*x24 + x11*x27 + x11*x28 + x11*x30 + x12*x15 + x12*x17 + x12*x21 + x12*x22 + x12*x23 + x12*x25 + x12*x27 + x12*x31 + x13*x14 + x13*x20 + x13*x22 + x13*x24 + x13*x28 + x13*x31 + x14*x16 + x14*x18 + x14*x19 + x14*x24 + x14*x26 + x14*x27 + x14*x31 + x15*x16 + x15*x17 + x15*x21 + x15*x22 + x15*x24 + x15*x25 + x15*x26 + x15*x27 + x15*x28 + x15*x29 + x15*x31 + x15 + x16*x17 + x16*x18 + x16*x23 + x16*x27 + x16*x28 + x16*x31 + x17*x18 + x17*x22 + x17*x23 + x17*x26 + x17*x27 + x17*x30 + x18*x22 + x18*x25 + x18*x29 + x18*x30 + x18*x31 + x19*x23 + x19*x24 + x19*x26 + x19*x29 + x19*x31 + x20*x22 + x20*x23 + x20*x24 + x20*x27 + x20*x28 + x20*x29 + x20*x30 + x21*x23 + x21*x24 + x21*x25 + x21*x31 + x22*x24 + x22*x25 + x22*x27 + x22*x28 + x22*x30 + x22*x31 + x23*x24 + x23*x26 + x23*x27 + x23*x30 + x23*x31 + x23 + x24*x26 + x24*x28 + x24*x30 + x24*x31 + x25*x27 + x25*x28 + x25*x30 + x25 + x26*x27 + x26*x30 + x27*x29 + x27 + x28*x31 + x29*x30 + x29*x31 + x29 + x31 + 1
x0*x3 + x0*x5 + x0*x6 + x0*x7 + x0*x8 + x0*x10 + x0*x12 + x0*x14 + x0*x17 + x0*x19 + x0*x21 + x0*x23 + x1*x2 + x1*x3 + x1*x5 + x1*x6 + x1*x8 + x1*x9 + x1*x11 + x1*x14 + x1*x18 + x1*x19 + x1*x21 + x1*x22 + x1*x23 + x1*x26 + x1*x27 + x1*x29 + x2*x4 + x2*x5 + x2*x8 + x2*x9 + x2*x10 + x2*x12 + x2*x14 + x2*x15 + x2*x16 + x2*x17 + x2*x20 + x2*x22 + x2*x23 + x2*x26 + x2*x28 + x2*x30 + x2*x31 + x2 + x3*x4 + x3*x5 + x3*x8 + x3*x13 + x3*x15 + x3*x18 + x3*x20 + x3*x22 + x3*x23 + x3*x24 + x3*x25 + x3*x29 + x3*x31 + x3 + x4*x8 + x4*x10 + x4*x13 + x4*x14 + x4*x16 + x4*x20 + x4*x21 + x4*x25 + x4*x26 + x4*x29 + x4*x30 + x4*x31 + x4 + x5*x6 + x5*x9 + x5*x10 + x5*x11 + x5*x16 + x5*x19 + x5*x20 + x5*x26 + x5*x31 + x5 + x6*x7 + x6*x11 + x6*x12 + x6*x14 + x6*x17 + x6*x20 + x6*x22 + x6*x25 + x6*x26 + x6*x28 + x6*x31 + x7*x13 + x7*x14 + x7*x19 + x7*x20 + x7*x22 + x7*x23 + x7*x24 + x7*x27 + x8*x11 + x8*x12 + x8*x13 + x8*x14 + x8*x18 + x8*x21 + x8*x22 + x8*x25 + x8*x26 + x8*x30 + x9*x11 + x9*x14 + x9*x15 + x9*x21 + x9*x22 + x9*x23 + x9*x24 + x9*x25 + x9*x28 + x10*x11 + x10*x13 + x10*x15 + x10*x16 + x10*x19 + x10*x20 + x10*x21 + x10*x24 + x10*x27 + x10*x28 + x10*x30 + x10*x31 + x10 + x11*x15 + x11*x16 + x11*x17 + x11*x20 + x11*x22 + x11*x23 + x11*x25 + x11*x27 + x11*x28 + x11*x31 + x11 + x12*x13 + x12*x14 + x12*x18 + x12*x19 + x12*x21 + x12*x23 + x12*x24 + x12*x25 + x12*x26 + x12*x27 + x12*x28 + x12*x31 + x12 + x13*x14 + x13*x17 + x13*x19 + x13*x21 + x13*x23 + x13*x24 + x13*x26 + x13*x31 + x14*x15 + x14*x16 + x14*x19 + x14*x22 + x14*x23 + x14*x25 + x14*x27 + x14*x29 + x14*x30 + x15*x20 + x15*x22 + x15*x23 + x15*x25 + x15*x26 + x15*x28 + x15*x30 + x15*x31 + x15 + x16*x17 + x16*x18 + x16*x19 + x16*x22 + x16*x24 + x16*x25 + x16*x27 + x16*x29 + x16*x31 + x17*x19 + x17*x20 + x17*x22 + x17*x24 + x17*x26 + x17*x29 + x17*x31 + x18*x19 + x18*x22 + x18*x23 + x18*x24 + x18*x27 + x18*x28 + x18*x29 + x18*x30 + x19*x21 + x19*x22 + x19*x24 + x19*x26 + x19*x27 + x19*x29 + x19*x30 + x20*x22 + x20*x23 + x20*x24 + x20*x26 + x21*x22 + x21*x25 + x21*x27 + x21*x28 + x21*x29 + x22*x23 + x22*x25 + x22*x26 + x22*x28 + x22*x30 + x22*x31 + x22 + x23*x24 + x23*x27 + x23*x29 + x23*x31 + x24*x28 + x24*x31 + x25*x30 + x25*x31 + x25 + x26*x28 + x26*x30 + x27*x28 + x27*x29 + x27*x30 + x29*x30 + x31 + 1
x0*x1 + x0*x2 + x0*x3 + x0*x4 + x0*x5 + x0*x6 + x0*x8 + x0*x9 + x0*x11 + x0*x12 + x0*x13 + x0*x14 + x0*x17 + x0*x18 + x0*x20 + x0*x21 + x0*x23 + x0*x24 + x0*x26 + x0*x27 + x0*x28 + x0*x29 + x0*x31 + x0 + x1*x2 + x1*x3 + x1*x4 + x1*x6 + x1*x9 + x1*x11 + x1*x12 + x1*x14 + x1*x16 + x1*x20 + x1*x25 + x1*x26 + x1*x30 + x1*x31 + x1 + x2*x6 + x2*x9 + x2*x10 + x2*x14 + x2*x15 + x2*x18 + x2*x19 + x2*x21 + x2*x24 + x2*x25 + x2*x27 + x2*x29 + x2 + x3*x5 + x3*x6 + x3*x10 + x3*x12 + x3*x14 + x3*x15 + x3*x16 + x3*x17 + x3*x18 + x3*x20 + x3*x21 + x3*x22 + x3*x23 + x3*x26 + x3*x28 + x3*x31 + x3 + x4*x7 + x4*x8 + x4*x9 + x4*x10 + x4*x11 + x4*x12 + x4*x14 + x4*x19 + x4*x20 + x4*x23 + x4*x26 + x4*x27 + x4*x28 + x4*x30 + x5*x7 + x5*x8 + x5*x9 + x5*x12 + x5*x14 + x5*x15 + x5*x16 + x5*x18 + x5*x19 + x5*x21 + x5*x24 + x5*x30 + x5 + x6*x9 + x6*x10 + x6*x20 + x6*x22 + x6*x23 + x6*x24 + x6*x28 + x6*x30 + x7*x8 + x7*x9 + x7*x10 + x7*x12 + x7*x13 + x7*x14 + x7*x15 + x7*x16 + x7*x17 + x7*x18 + x7*x23 + x7*x26 + x7*x28 + x7*x30 + x7*x31 + x7 + x8*x9 + x8*x10 + x8*x12 + x8*x14 + x8*x17 + x8*x18 + x8*x19 + x8*x22 + x8*x23 + x8*x24 + x8*x26 + x8*x27 + x8*x28 + x8*x29 + x8*x31 + x9*x11 + x9*x12 + x9*x15 + x9*x16 + x9*x17 + x9*x19 + x9*x22 + x9*x24 + x9 + x10*x11 + x10*x12 + x10*x17 + x10*x18 + x10*x19 + x10*x22 + x10*x23 + x10*x24 + x10*x25 + x10*x30 + x10*x31 + x11*x18 + x11*x19 + x11*x22 + x11*x23 + x11*x24 + x11*x26 + x11*x29 + x11*x30 + x12*x15 + x12*x18 + x12*x26 + x12*x27 + x12*x31 + x12 + x13*x20 + x13*x24 + x13*x27 + x13*x28 + x13*x29 + x13*x30 + x13*x31 + x14*x17 + x14*x18 + x14*x24 + x14*x26 + x14*x28 + x14*x30 + x14 + x15*x18 + x15*x19 + x15*x20 + x15*x23 + x15*x27 + x15*x29 + x15 + x16*x17 + x16*x19 + x16*x20 + x16*x21 + x16*x22 + x16*x29 + x16 + x17*x19 + x17*x20 + x17*x21 + x17*x22 + x17*x24 + x17*x26 + x17*x28 + x17*x31 + x18*x23 + x18*x24 + x18*x25 + x18*x26 + x18*x27 + x18*x30 + x19*x20 + x19*x23 + x19*x25 + x19*x26 + x19*x29 + x19*x31 + x20*x21 + x20*x22 + x20*x24 + x20*x25 + x20*x26 + x20*x27 + x20*x28 + x20*x29 + x20*x30 + x21*x23 + x21*x24 + x21*x25 + x21*x28 + x21*x29 + x21*x30 + x22*x23 + x22*x25 + x22*x26 + x22*x27 + x22*x28 + x22*x29 + x22*x30 + x22 + x23*x25 + x23*x28 + x23*x29 + x23*x30 + x23*x31 + x24*x28 + x24*x29 + x24*x30 + x25*x26 + x25*x28 + x25 + x27*x30 + x27*x31 + x28*x29 + x28*x30 + x28*x31 + x28 + x29*x30 + x30*x31 + x30
x0*x1 + x0*x2 + x0*x3 + x0*x4 + x0*x5 + x0*x7 + x0*x12 + x0*x13 + x0*x16 + x0*x17 + x0*x23 + x0*x24 + x0*x28 + x0*x29 + x0*x30 + x1*x2 + x1*x3 + x1*x6 + x1*x10 + x1*x11 + x1*x14 + x1*x16 + x1*x18 + x1*x19 + x1*x25 + x1*x26 + x1*x27 + x1*x28 + x1 + x2*x4 + x2*x5 + x2*x6 + x2*x8 + x2*x10 + x2*x11 + x2*x12 + x2*x17 + x2*x19 + x2*x20 + x2*x22 + x2*x24 + x2*x25 + x2*x29 + x2*x31 + x2 + x3*x5 + x3*x6 + x3*x12 + x3*x13 + x3*x14 + x3*x17 + x3*x21 + x3*x23 + x3*x27 + x3*x28 + x3*x31 + x3 + x4*x5 + x4*x11 + x4*x12 + x4*x14 + x4*x18 + x4*x21 + x4*x24 + x4*x25 + x4*x26 + x4*x27 + x4*x28 + x4 + x5*x9 + x5*x11 + x5*x12 + x5*x13 + x5*x15 + x5*x16 + x5*x19 + x5*x20 + x5*x21 + x5*x22 + x5*x23 + x5*x25 + x5*x26 + x5*x30 + x5*x31 + x6*x8 + x6*x9 + x6*x11 + x6*x13 + x6*x14 + x6*x16 + x6*x18 + x6*x19 + x6*x25 + x6*x28 + x6*x29 + x6 + x7*x8 + x7*x11 + x7*x16 + x7*x17 + x7*x19 + x7*x21 + x7*x23 + x7*x24 + x7*x27 + x7*x28 + x7*x29 + x7*x31 + x7 + x8*x9 + x8*x10 + x8*x13 + x8*x17 + x8*x19 + x8*x20 + x8*x22 + x8*x23 + x8*x26 + x8*x27 + x8*x30 + x8*x31 + x9*x10 + x9*x12 + x9*x13 + x9*x15 + x9*x16 + x9*x17 + x9*x20 + x9*x24 + x9*x27 + x9*x28 + x9*x31 + x10*x11 + x10*x12 + x10*x13 + x10*x20 + x10*x22 + x10*x24 + x10*x27 + x10*x28 + x10 + x11*x12 + x11*x14 + x11*x18 + x11*x19 + x11*x20 + x11*x22 + x11*x23 + x11*x24 + x11*x27 + x11*x30 + x11 + x12*x16 + x12*x17 + x12*x18 + x12*x21 + x12*x23 + x12*x26 + x12*x27 + x12*x28 + x12 + x13*x14 + x13*x15 + x13*x20 + x13*x22 + x13*x26 + x14*x17 + x14*x18 + x14*x23 + x14*x25 + x14*x27 + x14*x29 + x15*x16 + x15*x17 + x15*x18 + x15*x19 + x15*x22 + x15*x24 + x15*x26 + x15*x27 + x15*x28 + x15*x29 + x15*x31 + x16*x17 + x16*x19 + x16*x23 + x16*x24 + x16*x26 + x16*x27 + x16*x29 + x17*x18 + x17*x19 + x17*x20 + x17*x24 + x17*x25 + x17*x27 + x17*x28 + x17*x29 + x17*x31 + x17 + x18*x22 + x18*x24 + x18*x25 + x18*x30 + x19*x22 + x19*x24 + x19*x25 + x19*x26 + x19*x28 + x19*x31 + x19 + x20*x21 + x20*x22 + x20*x23 + x20*x25 + x20*x27 + x20*x29 + x20*x30 + x20*x31 + x21*x23 + x21*x25 + x21*x28 + x21*x30 + x21*x31 + x21 + x22*x23 + x22*x24 + x22*x28 + x22*x31 + x23*x24 + x23*x25 + x23*x26 + x23*x27 + x23*x28 + x23*x31 + x24*x25 + x24*x26 + x24 + x25*x28 + x25*x29 + x26*x27 + x26*x30 + x26 + x28*x29 + x28*x30 + x29*x31 + x30*x31 + x30 + 1
x0*x1 + x0*x3 + x0*x5 + x0*x6 + x0*x7 + x0*x8 + x0*x12 + x0*x16 + x0*x17 + x0*x18 + x0*x20 + x0*x22 + x0*x23 + x0*x26 + x0*x28 + x0*x29 + x0*x30 + x0*x31 + x0 + x1*x2 + x1*x5 + x1*x7 + x1*x8 + x1*x9 + x1*x12 + x1*x15 + x1*x18 + x1*x19 + x1*x23 + x1*x24 + x1*x25 + x1*x26 + x1*x28 + x1*x31 + x2*x3 + x2*x6 + x2*x7 + x2*x8 + x2*x9 + x2*x10 + x2*x11 + x2*x16 + x2*x18 + x2*x20 + x2*x21 + x2*x22 + x2*x23 + x2*x25 + x2*x26 + x2*x27 + x2*x29 + x3*x4 + x3*x6 + x3*x7 + x3*x8 + x3*x12 + x3*x13 + x3*x15 + x3*x17 + x3*x20 + x3*x21 + x3*x24 + x3*x26 + x3*x29 + x4*x6 + x4*x8 + x4*x10 + x4*x12 + x4*x13 + x4*x14 + x4*x16 + x4*x20 + x4*x22 + x4*x24 + x4*x25 + x4*x26 + x4*x28 + x5*x10 + x5*x11 + x5*x12 + x5*x14 + x5*x15 + x5*x16 + x5*x17 + x5*x18 + x5*x20 + x5*x21 + x5*x26 + x5*x27 + x5*x29 + x5*x31 + x6*x7 + x6*x8 + x6*x9 + x6*x11 + x6*x14 + x6*x15 + x6*x16 + x6*x19 + x6*x20 + x6*x23 + x6*x24 + x6*x26 + x7*x8 + x7*x10 + x7*x13 + x7*x14 + x7*x17 + x7*x19 + x7*x22 + x7*x28 + x7*x30 + x7*x31 + x7 + x8*x9 + x8*x10 + x8*x13 + x8*x14 + x8*x16 + x8*x17 + x8*x18 + x8*x19 + x8*x20 + x8*x22 + x8*x24 + x8*x25 + x8*x27 + x8*x28 + x8*x31 + x9*x10 + x9*x11 + x9*x14 + x9*x18 + x9*x20 + x9*x22 + x9*x25 + x9*x26 + x9*x28 + x9*x29 + x9*x30 + x9*x31 + x9 + x10*x11 + x10*x12 + x10*x13 + x10*x14 + x10*x15 + x10*x18 + x10*x19 + x10*x21 + x10*x22 + x10*x23 + x10*x24 + x10*x25 + x10*x26 + x10*x27 + x10*x31 + x11*x12 + x11*x14 + x11*x15 + x11*x16 + x11*x18 + x11*x20 + x11*x25 + x11*x30 + x12*x13 + x12*x15 + x12*x16 + x12*x19 + x12*x21 + x12*x22 + x12*x28 + x12*x29 + x12*x31 + x12 + x13*x15 + x13*x16 + x13*x18 + x13*x19 + x13*x20 + x13*x23 + x13*x24 + x13*x25 + x13*x29 + x13*x30 + x13*x31 + x13 + x14*x15 + x14*x17 + x14*x20 + x14*x21 + x14*x22 + x14*x23 + x14*x28 + x14*x29 + x14*x30 + x15*x16 + x15*x17 + x15*x18 + x15*x19 + x15*x20 + x15*x21 + x15*x25 + x15*x27 + x15*x29 + x15*x30 + x15*x31 + x15 + x16*x17 + x16*x18 + x16*x19 + x16*x21 + x16*x23 + x16*x24 + x16*x25 + x16*x27 + x16*x30 + x16 + x17*x18 + x17*x19 + x17*x20 + x17*x23 + x17*x24 + x17*x27 + x17*x29 + x18*x20 + x18*x23 + x18*x27 + x18*x29 + x18*x30 + x18*x31 + x19*x20 + x19*x21 + x19*x29 + x19*x30 + x19 + x20*x21 + x20*x24 + x20*x26 + x20*x27 + x20*x28 + x20*x29 + x21*x23 + x21*x24 + x21*x26 + x21*x27 + x21*x28 + x21*x30 + x21*x31 + x22*x25 + x22*x26 + x22*x27 + x22*x28 + x22*x29 + x23*x25 + x23*x26 + x23*x28 + x24*x25 + x24*x26 + x24*x27 + x24*x28 + x24*x29 + x24*x30 + x25*x27 + x25*x28 + x25*x29 + x25*x31 + x26*x31 + x26 + x27*x28 + x27*x30 + x27 + x28*x29 + x28*x30 + x28*x31 + x30*x31 + x31
x0*x5 + x0*x7 + x0*x8 + x0*x9 + x0*x10 + x0*x11 + x0*x13 + x0*x16 + x0*x17 + x0*x20 + x0*x21 + x0*x22 + x0*x23 + x0*x24 + x0*x25 + x0*x29 + x0*x30 + x1*x2 + x1*x4 + x1*x6 + x1*x7 + x1*x9 + x1*x11 + x1*x13 + x1*x14 + x1*x16 + x1*x18 + x1*x20 + x1*x21 + x1*x26 + x1*x27 + x1*x29 + x1*x30 + x1*x31 + x2*x3 + x2*x4 + x2*x5 + x2*x9 + x2*x10 + x2*x12 + x2*x13 + x2*x15 + x2*x16 + x2*x17 + x2*x20 + x2*x21 + x2*x22 + x2*x23 + x2*x24 + x2*x25 + x2*x26 + x2*x29 + x3*x6 + x3*x10 + x3*x13 + x3*x14 + x3*x17 + x3*x19 + x3*x22 + x3*x23 + x3*x25 + x3*x28 + x3*x30 + x3*x31 + x3 + x4*x7 + x4*x9 + x4*x10 + x4*x11 + x4*x12 + x4*x13 + x4*x16 + x4*x19 + x4*x20 + x4*x22 + x4*x23 + x4*x26 + x4*x27 + x4*x28 + x4*x30 + x4*x31 + x4 + x5*x8 + x5*x9 + x5*x10 + x5*x12 + x5*x13 + x5*x15 + x5*x19 + x5*x20 + x5*x21 + x5*x24 + x5*x29 + x5*x30 + x5 + x6*x8 + x6*x9 + x6*x10 + x6*x13 + x6*x14 + x6*x16 + x6*x17 + x6*x19 + x6*x20 + x6*x21 + x6*x22 + x6*x23 + x6*x25 + x6*x26 + x6*x30 + x6*x31 + x7*x11 + x7*x13 + x7*x14 + x7*x15 + x7*x16 + x7*x17 + x7*x20 + x7*x21 + x7*x23 + x7*x25 + x7*x27 + x7*x29 + x7*x30 + x7*x31 + x8*x12 + x8*x14 + x8*x15 + x8*x20 + x8*x21 + x8*x23 + x8*x24 + x8*x25 + x8*x26 + x8*x28 + x8*x31 + x8 + x9*x12 + x9*x14 + x9*x15 + x9*x16 + x9*x17 + x9*x18 + x9*x19 + x9*x21 + x9*x22 + x9*x24 + x9*x27 + x9*x28 + x9*x30 + x10*x12 + x10*x14 + x10*x15 + x10*x16 + x10*x17 + x10*x21 + x10*x22 + x10*x23 + x10*x24 + x10*x26 + x10*x31 + x11*x12 + x11*x13 + x11*x14 + x11*x15 + x11*x16 + x11*x17 + x11*x18 + x11*x19 + x11*x23 + x11*x25 + x11*x26 + x11*x31 + x11 + x12*x13 + x12*x17 + x12*x18 + x12*x19 + x12*x25 + x12*x28 + x12*x30 + x12 + x13*x17 + x13*x18 + x13*x19 + x13*x24 + x13*x30 + x14*x18 + x14*x19 + x14*x20 + x14*x24 + x14*x25 + x14*x26 + x14*x28 + x14*x31 + x15*x16 + x15*x17 + x15*x18 + x15*x19 + x15*x20 + x15*x26 + x15*x27 + x15*x29 + x15*x30 + x15*x31 + x15 + x16*x21 + x16*x22 + x16*x24 + x16*x25 + x16*x28 + x16*x29 + x16*x30 + x16 + x17*x21 + x17*x24 + x17*x25 + x17*x26 + x17*x28 + x17 + x18*x20 + x18*x21 + x18*x22 + x18*x23 + x18*x27 + x18 + x19*x20 + x19*x21 + x19*x24 + x19*x25 + x19*x26 + x19*x27 + x19*x28 + x19*x29 + x20*x21 + x20*x23 + x20*x24 + x20*x29 + x20*x30 + x20 + x21*x22 + x21*x23 + x21*x27 + x21*x28 + x21*x29 + x21*x31 + x21 + x22*x23 + x22*x24 + x22*x26 + x22*x28 + x22*x29 + x22*x31 + x22 + x23*x26 + x24*x27 + x24*x29 + x24 + x25*x27 + x25*x31 + x25 + x26*x29 + x26*x30 + x27*x28 + x27*x30 + x27 + x28*x29 + x28*x30 + x28*x31 + x29*x30 + x29*x31 + x31 + 1
x0*x2 + x0*x3 + x0*x6 + x0*x7 + x0*x9 + x0*x15 + x0*x16 + x0*x17 + x0*x20 + x0*x22 + x0*x23 + x0*x26 + x0*x27 + x0*x31 + x0 + x1*x3 + x1*x4 + x1*x6 + x1*x8 + x1*x9 + x1*x10 + x1*x11 + x1*x12 + x1*x13 + x1*x14 + x1*x15 + x1*x16 + x1*x17 + x1*x20 + x1*x21 + x1*x24 + x1*x25 + x1*x28 + x1*x29 + x1 + x2*x6 + x2*x7 + x2*x9 + x2*x15 + x2*x18 + x2*x19 + x2*x20 + x2*x23 + x2*x28 + x2*x29 + x2*x30 + x2*x31 + x3*x4 + x3*x6 + x3*x9 + x3*x11 + x3*x13 + x3*x14 + x3*x15 + x3*x18 + x3*x19 + x3*x20 + x3*x21 + x3*x23 + x3*x24 + x3*x25 + x3*x26 + x3*x31 + x3 + x4*x5 + x4*x6 + x4*x7 + x4*x8 + x4*x10 + x4*x12 + x4*x13 + x4*x15 + x4*x17 + x4*x18 + x4*x19 + x4*x21 + x4*x23 + x4*x24 + x4*x25 + x4*x27 + x4*x28 + x4*x29 + x4*x30 + x5*x6 + x5*x8 + x5*x10 + x5*x11 + x5*x12 + x5*x13 + x5*x15 + x5*x17 + x5*x18 + x5*x19 + x5*x20 + x5*x22 + x5*x23 + x5*x24 + x5*x25 + x5*x30 + x5*x31 + x6*x7 + x6*x8 + x6*x10 + x6*x12 + x6*x13 + x6*x20 + x6*x24 + x6*x25 + x6*x29 + x6*x31 + x6 + x7*x8 + x7*x9 + x7*x10 + x7*x14 + x7*x15 + x7*x16 + x7*x17 + x7*x18 + x7*x22 + x7*x23 + x7*x27 + x8*x10 + x8*x13 + x8*x15 + x8*x16 + x8*x17 + x8*x21 + x8*x23 + x8*x25 + x8*x27 + x8*x28 + x8*x29 + x8*x31 + x8 + x9*x10 + x9*x13 + x9*x14 + x9*x16 + x9*x17 + x9*x19 + x9*x21 + x9*x22 + x9*x23 + x9*x24 + x9*x25 + x9*x27 + x9*x30 + x9 + x10*x12 + x10*x13 + x10*x14 + x10*x16 + x10*x18 + x10*x21 + x10*x24 + x10*x25 + x10*x28 + x10*x31 + x11*x12 + x11*x13 + x11*x17 + x11*x18 + x11*x21 + x11*x22 + x11*x23 + x11*x24 + x11*x27 + x11*x30 + x11*x31 + x12*x13 + x12*x14 + x12*x18 + x12*x20 + x12*x21 + x12*x22 + x12*x23 + x12*x24 + x12*x25 + x12*x26 + x12*x27 + x12*x28 + x12 + x13*x15 + x13*x18 + x13*x24 + x13*x26 + x13*x29 + x13*x30 + x14*x15 + x14*x16 + x14*x20 + x14*x22 + x14*x24 + x14*x26 + x14*x27 + x14*x28 + x14*x30 + x14 + x15*x16 + x15*x17 + x15*x21 + x15*x25 + x15*x26 + x15*x29 + x15*x30 + x15 + x16*x18 + x16*x19 + x16*x20 + x16*x22 + x16*x23 + x16*x24 + x16*x25 + x16*x27 + x16*x29 + x16*x30 + x16*x31 + x16 + x17*x20 + x17*x21 + x17*x22 + x17*x23 + x17*x24 + x17*x26 + x17*x27 + x17*x28 + x17*x31 + x18*x19 + x18*x21 + x18*x27 + x18*x28 + x18*x31 + x18 + x19*x22 + x19*x25 + x19*x28 + x19*x30 + x19*x31 + x20*x21 + x20*x22 + x20*x26 + x20*x28 + x20*x29 + x20*x30 + x20 + x21*x23 + x21*x25 + x21*x27 + x21*x30 + x21 + x22*x24 + x22*x25 + x22*x26 + x22*x27 + x22*x28 + x22*x30 + x22*x31 + x23*x24 + x23*x25 + x23*x26 + x23*x28 + x23 + x24*x27 + x24*x30 + x25*x26 + x25*x27 + x25*x29 + x25 + x26*x27 + x26*x29 + x27*x28 + x27*x29 + x27*x31 + x28*x31 + x28 + x29
x0*x3 + x0*x7 + x0*x8 + x0*x9 + x0*x10 + x0*x11 + x0*x12 + x0*x13 + x0*x14 + x0*x15 + x0*x16 + x0*x17 + x0*x18 + x0*x19 + x0*x22 + x0*x23 + x0*x24 + x0*x26 + x1*x2 + x1*x5 + x1*x6 + x1*x7 + x1*x8 + x1*x9 + x1*x12 + x1*x15 + x1*x16 + x1*x18 + x1*x19 + x1*x20 + x1*x22 + x1*x23 + x1*x24 + x1*x27 + x1*x31 + x1 + x2*x3 + x2*x4 + x2*x5 + x2*x6 + x2*x7 + x2*x9 + x2*x11 + x2*x13 + x2*x14 + x2*x16 + x2*x17 + x2*x18 + x2*x20 + x2*x21 + x2*x22 + x2*x23 + x2*x25 + x2*x27 + x2 + x3*x5 + x3*x8 + x3*x10 + x3*x12 + x3*x13 + x3*x14 + x3*x17 + x3*x22 + x3*x23 + x3*x29 + x3*x31 + x4*x6 + x4*x8 + x4*x11 + x4*x12 + x4*x14 + x4*x16 + x4*x17 + x4*x18 + x4*x19 + x4*x21 + x4*x22 + x4*x23 + x4*x25 + x4*x28 + x4*x29 + x4 + x5*x8 + x5*x9 + x5*x10 + x5*x12 + x5*x14 + x5*x15 + x5*x16 + x5*x18 + x5*x21 + x5*x24 + x5*x25 + x5*x26 + x5*x29 + x5*x30 + x6*x8 + x6*x9 + x6*x10 + x6*x13 + x6*x15 + x6*x16 + x6*x19 + x6*x20 + x6*x23 + x6*x24 + x6*x25 + x6*x26 + x6*x29 + x6*x30 + x6 + x7*x10 + x7*x11 + x7*x12 + x7*x13 + x7*x14 + x7*x15 + x7*x16 + x7*x17 + x7*x20 + x7*x21 + x7*x22 + x7*x25 + x7*x26 + x7*x29 + x7*x30 + x8*x9 + x8*x11 + x8*x13 + x8*x14 + x8*x15 + x8*x16 + x8*x18 + x8*x19 + x8*x23 + x8*x25 + x8*x31 + x8 + x9*x10 + x9*x15 + x9*x17 + x9*x18 + x9*x21 + x9*x22 + x9*x23 + x9*x25 + x9*x27 + x9*x28 + x9*x29 + x9*x30 + x9*x31 + x10*x11 + x10*x12 + x10*x14 + x10*x15 + x10*x17 + x10*x22 + x10*x24 + x10*x26 + x10*x28 + x10*x30 + x11*x17 + x11*x19 + x11*x20 + x11*x25 + x11*x26 + x11*x27 + x11*x29 + x11*x30 + x12*x13 + x12*x17 + x12*x19 + x12*x20 + x12*x21 + x12*x23 + x12*x25 + x12*x27 + x12*x28 + x12*x29 + x12*x30 + x12 + x13*x14 + x13*x15 + x13*x16 + x13*x17 + x13*x23 + x13*x25 + x13*x26 + x13*x28 + x13*x29 + x13*x30 + x13*x31 + x13 + x14*x15 + x14*x16 + x14*x19 + x14*x23 + x14*x25 + x14*x26 + x14*x27 + x14*x28 + x14*x29 + x14*x30 + x14*x31 + x14 + x15*x17 + x15*x18 + x15*x19 + x15*x21 + x15*x24 + x15*x27 + x15*x28 + x15*x29 + x15*x31 + x16*x17 + x16*x21 + x16*x25 + x16*x26 + x16*x27 + x17*x21 + x17*x22 + x17*x24 + x17*x25 + x17*x26 + x17*x29 + x17*x31 + x17 + x18*x19 + x18*x20 + x18*x21 + x18*x23 + x18*x25 + x18*x27 + x18*x28 + x18*x29 + x18*x30 + x18*x31 + x19*x20 + x19*x22 + x19*x23 + x19*x24 + x19*x28 + x19 + x20*x21 + x20*x23 + x20*x24 + x20*x26 + x20*x29 + x20 + x21*x23 + x21*x24 + x21*x25 + x21*x26 + x21*x28 + x21*x30 + x21 + x22*x23 + x22*x26 + x22*x27 + x23*x26 + x23*x27 + x23*x29 + x24*x26 + x24*x29 + x24*x30 + x24*x31 + x25*x26 + x25*x29 + x25*x30 + x25 + x26*x27 + x26*x28 + x26*x29 + x26*x30 + x26*x31 + x26 + x27*x29 + x27*x30 + x27*x31 + x28*x29 + x28*x30 + x28*x31 + x29*x30 + x29 + x30*x31
x0*x3 + x0*x4 + x0*x6 + x0*x9 + x0*x11 + x0*x12 + x0*x13 + x0*x15 + x0*x16 + x0*x18 + x0*x20 + x0*x23 + x0*x25 + x0*x28 + x0*x29 + x0 + x1*x2 + x1*x3 + x1*x6 + x1*x8 + x1*x14 + x1*x18 + x1*x19 + x1*x22 + x1*x23 + x1*x25 + x1*x28 + x1*x31 + x2*x3 + x2*x4 + x2*x9 + x2*x10 + x2*x14 + x2*x16 + x2*x17 + x2*x18 + x2*x19 + x2*x20 + x2*x25 + x2*x27 + x2*x28 + x2*x29 + x2 + x3*x4 + x3*x5 + x3*x6 + x3*x8 + x3*x11 + x3*x12 + x3*x14 + x3*x15 + x3*x16 + x3*x17 + x3*x18 + x3*x22 + x3*x24 + x3*x25 + x3*x26 + x3*x27 + x3*x28 + x3*x29 + x4*x8 + x4*x10 + x4*x12 + x4*x13 + x4*x14 + x4*x16 + x4*x19 + x4*x22 + x4*x24 + x4*x25 + x4*x29 + x4*x31 + x4 + x5*x8 + x5*x10 + x5*x11 + x5*x13 + x5*x19 + x5*x21 + x5*x23 + x5*x24 + x5*x26 + x5*x28 + x5*x29 + x5*x31 + x6*x7 + x6*x9 + x6*x10 + x6*x11 + x6*x14 + x6*x18 + x6*x19 + x6*x20 + x6*x21 + x6*x23 + x6*x26 + x6*x30 + x6*x31 + x7*x9 + x7*x10 + x7*x11 + x7*x13 + x7*x14 + x7*x15 + x7*x16 + x7*x17 + x7*x18 + x7*x19 + x7*x25 + x7*x27 + x7*x28 + x7*x29 + x7*x30 + x7*x31 + x7 + x8*x9 + x8*x10 + x8*x11 + x8*x15 + x8*x17 + x8*x19 + x8*x20 + x8*x21 + x8*x22 + x8*x25 + x8*x26 + x8*x27 + x8*x29 + x8*x30 + x8*x31 + x8 + x9*x12 + x9*x14 + x9*x16 + x9*x17 + x9*x18 + x9*x19 + x9*x20 + x9*x22 + x9*x26 + x9*x29 + x9*x30 + x9 + x10*x11 + x10*x17 + x10*x19 + x10*x22 + x10*x23 + x10*x27 + x10 + x11*x12 + x11*x13 + x11*x17 + x11*x19 + x11*x20 + x11*x21 + x11*x23 + x11*x25 + x11*x27 + x11*x28 + x11*x29 + x11*x30 + x11*x31 + x11 + x12*x13 + x12*x14 + x12*x16 + x12*x17 + x12*x19 + x12*x22 + x12*x23 + x12*x25 + x12*x27 + x12*x29 + x12*x30 + x12*x31 + x12 + x13*x14 + x13*x16 + x13*x17 + x13*x19 + x13*x22 + x13*x24 + x13*x25 + x13*x26 + x13*x27 + x13 + x14*x15 + x14*x16 + x14*x17 + x14*x18 + x14*x21 + x14*x23 + x14*x24 + x14*x26 + x14*x31 + x14 + x15*x18 + x15*x20 + x15*x21 + x15*x22 + x15*x24 + x15*x26 + x15*x27 + x15*x30 + x15 + x16*x17 + x16*x18 + x16*x20 + x16*x23 + x16*x24 + x16*x26 + x16*x28 + x16*x29 + x16 + x17*x25 + x17*x28 + x17*x29 + x17*x31 + x17 + x18*x20 + x18*x21 + x18*x22 + x18*x24 + x18*x25 + x18*x26 + x18*x29 + x18*x30 + x18 + x19*x22 + x19*x25 + x19*x26 + x19*x27 + x19*x30 + x19*x31 + x20*x22 + x20*x23 + x20*x24 + x20*x25 + x20*x27 + x20*x31 + x20 + x21*x22 + x21*x23 + x21*x24 + x21*x27 + x21*x28 + x21*x30 + x22*x23 + x22*x24 + x22*x28 + x22*x29 + x22*x31 + x22 + x23*x28 + x23*x29 + x23 + x24*x25 + x24*x26 + x24*x28 + x24*x29 + x24*x30 + x24 + x25*x28 + x25*x29 + x25*x31 + x26*x27 + x26*x28 + x26*x29 + x26*x31 + x26 + x27*x30 + x27 + x28*x29 + x28*x31 + x28 + x29*x30 + x29*x31 + x30*x31 + x30
x0*x3 + x0*x4 + x0*x5 + x0*x8 + x0*x9 + x0*x10 + x0*x11 + x0*x12 + x0*x15 + x0*x16 + x0*x17 + x0*x18 + x0*x19 + x0*x22 + x0*x31 + x1*x6 + x1*x8 + x1*x13 + x1*x15 + x1*x18 + x1*x19 + x1*x20 + x1*x21 + x1*x23 + x1*x25 + x1*x26 + x1*x28 + x1*x29 + x1*x30 + x2*x3 + x2*x4 + x2*x5 + x2*x6 + x2*x7 + x2*x8 + x2*x11 + x2*x18 + x2*x25 + x2*x26 + x2*x29 + x2*x31 + x3*x4 + x3*x6 + x3*x7 + x3*x8 + x3*x9 + x3*x10 + x3*x11 + x3*x13 + x3*x16 + x3*x17 + x3*x18 + x3*x19 + x3*x20 + x3*x22 + x3*x23 + x3*x24 + x3*x25 + x3*x27 + x3*x28 + x3*x30 + x3 + x4*x6 + x4*x7 + x4*x8 + x4*x9 + x4*x11 + x4*x12 + x4*x13 + x4*x14 + x4*x19 + x4*x21 + x4*x26 + x4*x28 + x4*x29 + x4*x31 + x5*x6 + x5*x7 + x5*x8 + x5*x10 + x5*x11 + x5*x12 + x5*x13 + x5*x14 + x5*x15 + x5*x17 + x5*x19 + x5*x20 + x5*x21 + x5*x22 + x5*x24 + x5*x25 + x5*x26 + x5*x27 + x5*x28 + x5*x30 + x5*x31 + x5 + x6*x7 + x6*x8 + x6*x9 + x6*x11 + x6*x12 + x6*x13 + x6*x14 + x6*x17 + x6*x19 + x6*x24 + x6*x25 + x6*x27 + x6*x31 + x6 + x7*x8 + x7*x9 + x7*x10 + x7*x13 + x7*x17 + x7*x19 + x7*x20 + x7*x21 + x7*x24 + x7*x25 + x7*x28 + x8*x9 + x8*x10 + x8*x12 + x8*x16 + x8*x17 + x8*x18 + x8*x19 + x8*x20 + x8*x21 + x8*x23 + x8*x26 + x8*x28 + x8*x29 + x8*x30 + x8*x31 + x8 + x9*x10 + x9*x15 + x9*x16 + x9*x17 + x9*x19 + x9*x20 + x9*x23 + x9*x24 + x9*x26 + x9*x27 + x9*x28 + x9*x31 + x9 + x10*x11 + x10*x12 + x10*x13 + x10*x16 + x10*x18 + x10*x19 + x10*x20 + x10*x22 + x10*x26 + x10*x28 + x11*x14 + x11*x15 + x11*x16 + x11*x17 + x11*x21 + x11*x23 + x11*x27 + x12*x15 + x12*x16 + x12*x19 + x12*x20 + x12*x22 + x12*x23 + x12*x24 + x12*x25 + x12*x26 + x13*x15 + x13*x19 + x13*x20 + x13*x21 + x13*x27 + x13*x28 + x13*x29 + x13 + x14*x15 + x14*x16 + x14*x17 + x14*x18 + x14*x19 + x14*x23 + x14*x24 + x14*x25 + x14*x27 + x14*x28 + x14 + x15*x17 + x15*x18 + x15*x20 + x15*x22 + x15*x23 + x15*x28 + x15*x29 + x15*x30 + x15*x31 + x16*x18 + x16*x19 + x16*x21 + x16*x22 + x16*x24 + x16*x29 + x16 + x17*x19 + x17*x20 + x17*x21 + x17*x25 + x17*x27 + x17*x29 + x17*x30 + x17*x31 + x17 + x18*x19 + x18*x20 + x18*x22 + x18*x25 + x18*x28 + x18*x29 + x19*x21 + x19*x23 + x19*x24 + x19*x25 + x19*x27 + x19*x28 + x19*x30 + x19*x31 + x20*x21 + x20*x23 + x20*x25 + x20*x29 + x20*x31 + x20 + x21*x23 + x21*x27 + x21*x29 + x21*x31 + x22*x23 + x22*x26 + x22*x27 + x22*x30 + x22*x31 + x22 + x23*x24 + x23*x26 + x23*x28 + x23*x29 + x23 + x24*x25 + x24*x26 + x24*x27 + x24*x28 + x24*x29 + x24*x30 + x24*x31 + x24 + x25*x28 + x25*x29 + x25*x31 + x26*x27 + x26*x28 + x27*x28 + x27 + x28*x30 + x29*x31 + x30*x31 + x30 + x31
x0*x1 + x0*x3 + x0*x4 + x0*x6 + x0*x7 + x0*x8 + x0*x11 + x0*x14 + x0*x15 + x0*x16 + x0*x17 + x0*x21 + x0*x22 + x0*x24 + x0*x26 + x0*x30 + x0 + x1*x2 + x1*x4 + x1*x10 + x1*x11 + x1*x13 + x1*x14 + x1*x15 + x1*x17 + x1*x19 + x1*x22 + x1*x23 + x1*x25 + x1*x28 + x1*x29 + x1*x30 + x1*x31 + x2*x3 + x2*x4 + x2*x6 + x2*x9 + x2*x10 + x2*x11 + x2*x13 + x2*x14 + x2*x15 + x2*x17 + x2*x19 + x2*x20 + x2*x23 + x2*x27 + x2*x29 + x3*x6 + x3*x7 + x3*x8 + x3*x10 + x3*x13 + x3*x14 + x3*x15 + x3*x16 + x3*x20 + x3*x22 + x3*x24 + x3*x25 + x3*x27 + x3*x28 + x3*x31 + x3 + x4*x6 + x4*x8 + x4*x10 + x4*x13 + x4*x16 + x4*x17 + x4*x21 + x4*x24 + x4*x27 + x4*x28 + x5*x7 + x5*x10 + x5*x16 + x5*x17 + x5*x18 + x5*x19 + x5*x20 + x5*x23 + x5*x24 + x5*x25 + x5*x29 + x5*x31 + x6*x10 + x6*x12 + x6*x13 + x6*x14 + x6*x17 + x6*x19 + x6*x20 + x6*x21 + x6*x22 + x6*x23 + x6*x24 + x6*x26 + x6*x27 + x6*x28 + x6*x29 + x6*x31 + x7*x10 + x7*x13 + x7*x14 + x7*x16 + x7*x21 + x7*x22 + x7*x25 + x7*x27 + x7*x31 + x7 + x8*x11 + x8*x12 + x8*x15 + x8*x16 + x8*x17 + x8*x18 + x8*x22 + x8*x26 + x8*x27 + x8*x28 + x8*x29 + x8*x30 + x8 + x9*x10 + x9*x14 + x9*x15 + x9*x18 + x9*x19 + x9*x20 + x9*x21 + x9*x22 + x9*x23 + x9*x24 + x9*x26 + x9*x27 + x9*x29 + x9*x31 + x10*x11 + x10*x12 + x10*x14 + x10*x16 + x10*x19 + x10*x20 + x10*x21 + x10*x22 + x10*x24 + x10*x25 + x10*x27 + x10*x29 + x10*x31 + x10 + x11*x13 + x11*x14 + x11*x18 + x11*x19 + x11*x23 + x11*x24 + x11*x25 + x11*x28 + x11*x31 + x12*x14 + x12*x18 + x12*x20 + x12*x24 + x12*x25 + x12*x27 + x12*x30 + x12*x31 + x12 + x13*x14 + x13*x17 + x13*x21 + x13*x22 + x13*x23 + x13*x24 + x13*x26 + x13*x29 + x13*x30 + x13*x31 + x13 + x14*x15 + x14*x19 + x14*x20 + x14*x24 + x14*x31 + x15*x17 + x15*x21 + x15*x22 + x15*x24 + x15*x25 + x15*x26 + x15*x27 + x15*x29 + x16*x24 + x16*x26 + x16*x29 + x17*x19 + x17*x20 + x17*x22 + x17*x27 + x17*x29 + x17 + x18*x26 + x18*x27 + x18*x28 + x18*x29 + x18*x31 + x19*x21 + x19*x22 + x19*x24 + x19*x25 + x19*x26 + x19*x27 + x19*x28 + x19 + x20*x21 + x20*x22 + x20*x23 + x20*x24 + x20*x25 + x20*x26 + x20*x28 + x20 + x21*x22 + x21*x23 + x21*x24 + x21*x26 + x21*x30 + x21*x31 + x21 + x22*x24 + x22*x26 + x22*x28 + x22*x29 + x22*x30 + x22*x31 + x23*x25 + x23*x26 + x23*x27 + x23*x30 + x23 + x24*x26 + x24*x27 + x24*x29 + x24*x30 + x24*x31 + x25*x27 + x25*x29 + x25*x31 + x25 + x26*x27 + x26*x28 + x26*x29 + x26*x31 + x26 + x27*x30 + x27*x31 + x28*x30 + x28*x31 + x30*x31 + x30 + 1
x0*x2 + x0*x6 + x0*x8 + x0*x12 + x0*x13 + x0*x14 + x0*x16 + x0*x17 + x0*x18 + x0*x21 + x0*x22 + x0*x26 + x0*x28 + x0*x29 + x0*x31 + x1*x2 + x1*x3 + x1*x4 + x1*x5 + x1*x9 + x1*x16 + x1*x17 + x1*x20 + x1*x23 + x1*x28 + x1*x29 + x1*x30 + x1 + x2*x4 + x2*x5 + x2*x6 + x2*x8 + x2*x11 + x2*x15 + x2*x18 + x2*x19 + x2*x21 + x2*x22 + x2*x23 + x2*x24 + x2*x26 + x2*x28 + x2*x29 + x2*x31 + x3*x4 + x3*x7 + x3*x8 + x3*x9 + x3*x10 + x3*x12 + x3*x13 + x3*x14 + x3*x15 + x3*x16 + x3*x20 + x3*x27 + x3*x28 + x3*x29 + x3 + x4*x5 + x4*x6 + x4*x7 + x4*x10 + x4*x13 + x4*x14 + x4*x15 + x4*x16 + x4*x18 + x4*x19 + x4*x23 + x4*x25 + x4*x27 + x4*x28 + x4*x29 + x4*x31 + x5*x6 + x5*x9 + x5*x14 + x5*x15 + x5*x16 + x5*x17 + x5*x25 + x5*x26 + x5*x29 + x5*x31 + x5 + x6*x8 + x6*x9 + x6*x10 + x6*x12 + x6*x13 + x6*x14 + x6*x19 + x6*x21 + x6*x25 + x6*x28 + x7*x9 + x7*x10 + x7*x13 + x7*x20 + x7*x22 + x7*x26 + x7*x29 + x7*x30 + x8*x13 + x8*x14 + x8*x17 + x8*x18 + x8*x19 + x8*x20 + x8*x21 + x8*x22 + x8*x23 + x8*x25 + x8*x26 + x8*x28 + x8*x30 + x8*x31 + x8 + x9*x10 + x9*x11 + x9*x14 + x9*x15 + x9*x16 + x9*x17 + x9*x18 + x9*x20 + x9*x21 + x9*x22 + x9*x24 + x9*x27 + x9*x29 + x9*x30 + x9*x31 + x10*x14 + x10*x15 + x10*x21 + x10*x24 + x10*x27 + x10*x30 + x10*x31 + x11*x12 + x11*x13 + x11*x14 + x11*x15 + x11*x16 + x11*x18 + x11*x20 + x11*x21 + x11*x24 + x11*x25 + x11*x26 + x11*x27 + x11*x30 + x11*x31 + x12*x13 + x12*x17 + x12*x18 + x12*x19 + x12*x21 + x12*x22 + x12*x24 + x12*x25 + x12*x27 + x12*x29 + x12*x30 + x12*x31 + x13*x14 + x13*x16 + x13*x19 + x13*x20 + x13*x21 + x13*x22 + x13*x23 + x13*x25 + x13*x28 + x13*x29 + x13 + x14*x18 + x14*x21 + x14*x25 + x14*x26 + x14*x27 + x14*x29 + x14*x30 + x15*x21 + x15*x22 + x15*x23 + x15*x29 + x15*x30 + x15*x31 + x15 + x16*x20 + x16*x21 + x16*x26 + x16*x30 + x16 + x17*x23 + x17*x24 + x17*x25 + x17*x28 + x17*x29 + x17 + x18*x19 + x18*x20 + x18*x23 + x18*x25 + x18*x27 + x18*x30 + x19*x20 + x19*x21 + x19*x24 + x19*x25 + x19*x26 + x19*x27 + x19*x30 + x20*x22 + x20*x23 + x20*x27 + x20*x30 + x20 + x21*x30 + x21*x31 + x21 + x22*x28 + x22*x29 + x22*x31 + x23*x25 + x23*x26 + x23*x27 + x23*x29 + x23*x31 + x24*x25 + x24*x29 + x24*x30 + x24 + x25*x26 + x25*x27 + x25*x28 + x25*x31 + x26*x28 + x26*x29 + x26*x30 + x27*x29 + x27*x30 + x28*x29 + x28*x31 + x31 + 1
x0*x5 + x0*x10 + x0*x14 + x0*x18 + x0*x19 + x0*x20 + x0*x21 + x0*x24 + x0*x25 + x0*x26 + x0*x27 + x0*x28 + x0*x29 + x0*x31 + x0 + x1*x6 + x1*x7 + x1*x8 + x1*x9 + x1*x12 + x1*x13 + x1*x15 + x1*x16 + x1*x18 + x1*x20 + x1*x25 + x1*x26 + x1*x31 + x1 + x2*x3 + x2*x7 + x2*x9 + x2*x10 + x2*x11 + x2*x12 + x2*x13 + x2*x15 + x2*x20 + x2*x21 + x2*x23 + x2*x24 + x2*x25 + x2*x29 + x2*x30 + x3*x5 + x3*x7 + x3*x10 + x3*x12 + x3*x13 + x3*x14 + x3*x16 + x3*x17 + x3*x19 + x3*x22 + x3*x27 + x3*x28 + x3*x30 + x3*x31 + x3 + x4*x5 + x4*x8 + x4*x10 + x4*x11 + x4*x12 + x4*x13 + x4*x14 + x4*x15 + x4*x18 + x4*x21 + x4*x22 + x4*x23 + x4*x24 + x4*x26 + x4*x28 + x4*x30 + x4*x31 + x5*x6 + x5*x8 + x5*x9 + x5*x11 + x5*x12 + x5*x13 + x5*x14 + x5*x19 + x5*x21 + x5*x22 + x5*x26 + x5*x29 + x5*x31 + x5 + x6*x9 + x6*x11 + x6*x13 + x6*x16 + x6*x20 + x6*x21 + x6*x26 + x6*x29 + x6 + x7*x8 + x7*x10 + x7*x11 + x7*x13 + x7*x14 + x7*x15 + x7*x17 + x7*x18 + x7*x23 + x7*x24 + x7*x25 + x7*x27 + x7*x28 + x7*x29 + x7*x31 + x8*x9 + x8*x12 + x8*x16 + x8*x19 + x8*x20 + x8*x22 + x8*x24 + x8*x26 + x8*x28 + x8*x30 + x8*x31 + x8 + x9*x10 + x9*x12 + x9*x13 + x9*x19 + x9*x22 + x9*x27 + x9*x29 + x9*x30 + x9*x31 + x10*x11 + x10*x12 + x10*x13 + x10*x15 + x10*x16 + x10*x19 + x10*x23 + x10*x29 + x10*x30 + x10 + x11*x13 + x11*x16 + x11*x18 + x11*x19 + x11*x23 + x11*x27 + x11*x29 + x11*x30 + x11*x31 + x11 + x12*x15 + x12*x16 + x12*x17 + x12*x21 + x12*x24 + x12*x25 + x12*x26 + x12*x28 + x12*x29 + x12 + x13*x16 + x13*x17 + x13*x18 + x13*x19 + x13*x20 + x13*x25 + x13*x26 + x13*x30 + x14*x15 + x14*x17 + x14*x21 + x14*x29 + x14*x30 + x14*x31 + x15*x17 + x15*x18 + x15*x20 + x15*x21 + x15*x22 + x15*x28 + x15*x29 + x15*x31 + x16*x19 + x16*x20 + x16*x21 + x16*x24 + x16*x26 + x16*x30 + x16*x31 + x16 + x17*x18 + x17*x19 + x17*x20 + x17*x21 + x17*x22 + x17*x24 + x17*x26 + x17*x27 + x17*x28 + x17*x30 + x18*x19 + x18*x20 + x18*x22 + x18*x23 + x18*x25 + x18*x28 + x18*x29 + x19*x20 + x19*x21 + x19*x25 + x19*x31 + x20*x28 + x20*x30 + x21*x23 + x21*x25 + x21*x27 + x21*x28 + x21*x29 + x21*x30 + x22*x24 + x22*x25 + x22*x26 + x22*x31 + x22 + x23*x24 + x23*x26 + x23*x28 + x23*x29 + x23*x30 + x23 + x24*x26 + x24*x28 + x24*x29 + x24*x31 + x25*x27 + x25*x28 + x25*x29 + x25*x30 + x25*x31 + x26*x29 + x26*x30 + x26*x31 + x26 + x27*x29 + x27*x31 + x28 + x31
x0*x1 + x0*x7 + x0*x8 + x0*x9 + x0*x11 + x0*x12 + x0*x13 + x0*x14 + x0*x18 + x0*x19 + x0*x20 + x0*x21 + x0*x25 + x0*x26 + x0*x27 + x0*x29 + x0 + x1*x2 + x1*x3 + x1*x5 + x1*x6 + x1*x9 + x1*x11 + x1*x14 + x1*x16 + x1*x17 + x1*x18 + x1*x19 + x1*x23 + x1*x24 + x1*x25 + x1*x26 + x1*x27 + x1*x28 + x1*x29 + x1*x30 + x1*x31 + x2*x7 + x2*x9 + x2*x10 + x2*x13 + x2*x15 + x2*x17 + x2*x18 + x2*x20 + x2*x21 + x2*x27 + x2*x29 + x2*x30 + x3*x6 + x3*x9 + x3*x12 + x3*x13 + x3*x15 + x3*x16 + x3*x18 + x3*x19 + x3*x22 + x3*x23 + x3*x25 + x3*x28 + x3*x29 + x4*x5 + x4*x7 + x4*x8 + x4*x9 + x4*x15 + x4*x17 + x4*x20 + x4*x22 + x4*x24 + x4 + x5*x6 + x5*x8 + x5*x14 + x5*x17 + x5*x21 + x5*x24 + x5*x26 + x5*x27 + x5*x30 + x6*x8 + x6*x10 + x6*x16 + x6*x20 + x6*x24 + x6*x25 + x6*x26 + x6*x27 + x6*x29 + x6*x30 + x6*x31 + x6 + x7*x9 + x7*x14 + x7*x15 + x7*x17 + x7*x20 + x7*x21 + x7*x22 + x7*x24 + x7*x29 + x7*x30 + x7*x31 + x7 + x8*x11 + x8*x13 + x8*x15 + x8*x17 + x8*x19 + x8*x20 + x8*x21 + x8*x24 + x8*x25 + x8*x29 + x8*x31 + x8 + x9*x10 + x9*x11 + x9*x12 + x9*x14 + x9*x16 + x9*x19 + x9*x23 + x9*x25 + x9*x26 + x9*x27 + x9*x30 + x9 + x10*x13 + x10*x15 + x10*x16 + x10*x18 + x10*x19 + x10*x20 + x10*x21 + x10*x22 + x10*x25 + x10*x27 + x10*x29 + x10 + x11*x12 + x11*x13 + x11*x14 + x11*x16 + x11*x17 + x11*x19 + x11*x22 + x11*x24 + x11*x26 + x11*x27 + x11*x29 + x11*x30 + x11*x31 + x11 + x12*x15 + x12*x16 + x12*x17 + x12*x19 + x12*x21 + x12*x24 + x12*x26 + x12*x29 + x12*x30 + x12 + x13*x16 + x13*x17 + x13*x18 + x13*x20 + x13*x23 + x13*x24 + x13*x26 + x13*x27 + x14*x16 + x14*x19 + x14*x22 + x14*x23 + x14*x24 + x14*x25 + x14*x26 + x14*x27 + x14*x29 + x14*x31 + x15*x16 + x15*x19 + x15*x20 + x15*x21 + x15*x23 + x15*x24 + x15*x26 + x15*x27 + x15*x29 + x15*x30 + x16*x17 + x16*x21 + x16*x22 + x16*x24 + x16*x25 + x16*x26 + x16*x28 + x16*x29 + x16*x30 + x17*x18 + x17*x19 + x17*x21 + x17*x23 + x17*x24 + x17*x26 + x17*x27 + x17*x28 + x18*x19 + x18*x20 + x18*x22 + x18*x23 + x18*x25 + x18*x27 + x18*x29 + x18*x30 + x19*x21 + x19*x22 + x19*x23 + x19*x26 + x19*x27 + x19*x29 + x19 + x20*x31 + x21*x22 + x21*x26 + x21*x27 + x21*x28 + x21*x31 + x22*x23 + x22*x25 + x22*x27 + x22*x28 + x22*x29 + x22*x31 + x23*x24 + x23*x26 + x23*x27 + x23*x28 + x23*x29 + x23*x31 + x23 + x24*x25 + x24*x26 + x24*x28 + x24*x31 + x24 + x25*x30 + x25*x31 + x25 + x26*x27 + x27*x28 + x27*x29 + x27*x30 + x28*x29 + x28*x30 + x28 + x29*x30 + x29
x0*x1 + x0*x2 + x0*x3 + x0*x4 + x0*x7 + x0*x9 + x0*x10 + x0*x13 + x0*x14 + x0*x16 + x0*x21 + x0*x22 + x0*x24 + x0*x25 + x0*x26 + x0*x29 + x1*x2 + x1*x4 + x1*x5 + x1*x8 + x1*x9 + x1*x10 + x1*x13 + x1*x14 + x1*x16 + x1*x19 + x1*x22 + x1*x26 + x1*x28 + x1*x29 + x1*x30 + x1*x31 + x1 + x2*x3 + x2*x4 + x2*x7 + x2*x10 + x2*x11 + x2*x12 + x2*x15 + x2*x16 + x2*x17 + x2*x18 + x2*x21 + x2*x22 + x2*x23 + x2*x24 + x2*x26 + x2*x27 + x2*x28 + x2*x29 + x2*x30 + x2 + x3*x4 + x3*x5 + x3*x7 + x3*x8 + x3*x9 + x3*x12 + x3*x13 + x3*x14 + x3*x16 + x3*x18 + x3*x19 + x3*x21 + x3*x26 + x3*x27 + x3*x28 + x3*x30 + x4*x7 + x4*x9 + x4*x11 + x4*x13 + x4*x14 + x4*x16 + x4*x17 + x4*x18 + x4*x23 + x4*x24 + x4*x26 + x4*x28 + x4*x30 + x4 + x5*x7 + x5*x9 + x5*x10 + x5*x11 + x5*x14 + x5*x15 + x5*x18 + x5*x19 + x5*x25 + x5*x26 + x5*x28 + x5*x30 + x5*x31 + x5 + x6*x8 + x6*x9 + x6*x10 + x6*x12 + x6*x13 + x6*x17 + x6*x19 + x6*x20 + x6*x25 + x6*x29 + x6*x30 + x6*x31 + x7*x9 + x7*x19 + x7*x20 + x7*x24 + x7*x26 + x7*x31 + x8*x9 + x8*x10 + x8*x13 + x8*x14 + x8*x16 + x8*x18 + x8*x19 + x8*x21 + x8*x23 + x8*x28 + x8*x29 + x9*x11 + x9*x15 + x9*x17 + x9*x19 + x9*x22 + x9*x24 + x9*x25 + x9*x26 + x9 + x10*x11 + x10*x13 + x10*x15 + x10*x16 + x10*x17 + x10*x19 + x10*x22 + x10*x24 + x10*x25 + x10*x28 + x10*x29 + x10*x30 + x10 + x11*x18 + x11*x21 + x11*x22 + x11*x23 + x11*x25 + x11*x26 + x11*x28 + x12*x14 + x12*x18 + x12*x19 + x12*x20 + x12*x23 + x12*x24 + x12*x27 + x12*x28 + x12*x31 + x12 + x13*x14 + x13*x15 + x13*x16 + x13*x20 + x13*x21 + x13*x23 + x13*x24 + x13*x26 + x13*x27 + x13*x28 + x13*x30 + x13*x31 + x14*x15 + x14*x16 + x14*x17 + x14*x18 + x14*x23 + x14*x27 + x14*x30 + x14*x31 + x15*x16 + x15*x21 + x15*x22 + x15*x24 + x15*x25 + x15*x27 + x15*x28 + x15*x29 + x15 + x16*x18 + x16*x20 + x16*x22 + x16*x24 + x16*x26 + x16*x28 + x16*x29 + x16*x31 + x16 + x17*x18 + x17*x21 + x17*x22 + x17*x23 + x17*x27 + x18*x19 + x18*x20 + x18*x23 + x18*x24 + x18*x26 + x18*x27 + x18*x31 + x19*x20 + x19*x22 + x19*x25 + x19*x26 + x19*x27 + x19*x29 + x19*x31 + x19 + x20*x28 + x20*x29 + x20*x30 + x20*x31 + x20 + x21*x22 + x21*x24 + x21*x26 + x21*x28 + x21*x30 + x21*x31 + x21 + x22*x23 + x22*x26 + x22*x30 + x22 + x23*x29 + x23*x30 + x23*x31 + x24*x25 + x24*x27 + x24*x28 + x24*x29 + x25*x29 + x25*x30 + x25 + x26*x29 + x26*x31 + x27*x30 + x27*x31 + x27 + x28*x29 + x28*x30 + x28*x31 + x28 + x29*x31 + x30*x31 + x30 + x31 + 1
x0*x1 + x0*x2 + x0*x3 + x0*x4 + x0*x6 + x0*x11 + x0*x12 + x0*x13 + x0*x16 + x0*x17 + x0*x21 + x0*x22 + x0*x24 + x0*x28 + x0*x29 + x0*x31 + x1*x2 + x1*x3 + x1*x4 + x1*x7 + x1*x8 + x1*x10 + x1*x11 + x1*x13 + x1*x14 + x1*x16 + x1*x18 + x1*x19 + x1*x20 + x1*x22 + x1*x24 + x1*x28 + x1*x31 + x1 + x2*x4 + x2*x6 + x2*x12 + x2*x16 + x2*x17 + x2*x21 + x2*x22 + x2*x24 + x2*x27 + x2*x30 + x2*x31 + x2 + x3*x8 + x3*x12 + x3*x13 + x3*x14 + x3*x16 + x3*x19 + x3*x20 + x3*x22 + x3*x24 + x3*x27 + x3*x29 + x3*x30 + x3*x31 + x4*x6 + x4*x8 + x4*x12 + x4*x16 + x4*x19 + x4*x22 + x4*x23 + x4*x24 + x4*x25 + x4*x26 + x4*x27 + x4*x28 + x4 + x5*x6 + x5*x7 + x5*x8 + x5*x12 + x5*x13 + x5*x14 + x5*x15 + x5*x19 + x5*x21 + x5*x24 + x5*x25 + x5*x26 + x5*x28 + x5*x30 + x6*x12 + x6*x13 + x6*x14 + x6*x16 + x6*x17 + x6*x21 + x6*x22 + x6*x26 + x6*x27 + x6*x28 + x6*x30 + x6*x31 + x6 + x7*x10 + x7*x11 + x7*x12 + x7*x13 + x7*x14 + x7*x15 + x7*x18 + x7*x19 + x7*x20 + x7*x21 + x7*x23 + x7*x24 + x7*x28 + x8*x9 + x8*x12 + x8*x14 + x8*x16 + x8*x18 + x8*x19 + x8*x21 + x8*x24 + x8*x25 + x8*x26 + x8*x27 + x8*x29 + x8*x31 + x8 + x9*x10 + x9*x12 + x9*x13 + x9*x15 + x9*x17 + x9*x20 + x9*x24 + x9*x25 + x9*x30 + x9*x31 + x9 + x10*x12 + x10*x13 + x10*x15 + x10*x17 + x10*x20 + x10*x21 + x10*x22 + x10*x23 + x10*x27 + x10*x28 + x10*x29 + x10*x30 + x10*x31 + x10 + x11*x13 + x11*x14 + x11*x16 + x11*x17 + x11*x20 + x11*x27 + x11*x28 + x11*x29 + x11*x30 + x11*x31 + x12*x13 + x12*x18 + x12*x21 + x12*x22 + x12*x23 + x12*x24 + x12*x27 + x12*x30 + x12*x31 + x13*x14 + x13*x17 + x13*x21 + x13*x22 + x13*x23 + x13*x26 + x13*x27 + x13*x28 + x13*x30 + x13*x31 + x13 + x14*x17 + x14*x21 + x14*x22 + x14*x23 + x14*x25 + x14*x27 + x14*x29 + x14*x31 + x14 + x15*x16 + x15*x20 + x15*x22 + x15*x23 + x15*x24 + x15*x27 + x15*x28 + x15*x29 + x15*x30 + x16*x18 + x16*x19 + x16*x20 + x16*x21 + x16*x22 + x16*x23 + x16*x26 + x16*x27 + x16*x28 + x16*x30 + x16*x31 + x17*x18 + x17*x19 + x17*x22 + x17*x25 + x17*x27 + x18*x24 + x18*x25 + x18*x26 + x18*x30 + x19*x21 + x19*x27 + x19*x28 + x19*x30 + x20*x23 + x20*x24 + x20*x25 + x20*x27 + x20 + x21*x24 + x21*x25 + x21*x27 + x21*x28 + x21 + x22*x23 + x22*x24 + x22*x26 + x22*x27 + x22*x31 + x22 + x23*x25 + x23*x26 + x23*x27 + x23*x28 + x23*x30 + x23*x31 + x24*x28 + x24*x29 + x25*x26 + x25*x27 + x25*x28 + x25*x30 + x25*x31 + x26*x27 + x26*x29 + x26*x30 + x27*x28 + x27*x31 + x28*x30 + x28*x31 + x28 + x29*x30 + x29*x31 + x30*x31 + x30 + x31
x0*x1 + x0*x2 + x0*x3 + x0*x4 + x0*x5 + x0*x8 + x0*x13 + x0*x15 + x0*x17 + x0*x21 + x0*x22 + x0*x23 + x0*x24 + x0*x25 + x0*x29 + x0*x30 + x1*x5 + x1*x7 + x1*x8 + x1*x9 + x1*x12 + x1*x16 + x1*x17 + x1*x18 + x1*x20 + x1*x22 + x1*x23 + x1*x24 + x1*x27 + x1*x29 + x1 + x2*x4 + x2*x5 + x2*x6 + x2*x7 + x2*x8 + x2*x9 + x2*x10 + x2*x11 + x2*x13 + x2*x15 + x2*x18 + x2*x19 + x2*x21 + x2*x22 + x2*x23 + x2*x24 + x2*x26 + x2*x27 + x2*x29 + x2*x30 + x3*x7 + x3*x9 + x3*x10 + x3*x11 + x3*x12 + x3*x15 + x3*x16 + x3*x23 + x3*x24 + x3*x25 + x3*x26 + x3*x29 + x3*x30 + x4*x5 + x4*x6 + x4*x9 + x4*x13 + x4*x15 + x4*x16 + x4*x18 + x4*x23 + x4*x24 + x4*x26 + x4*x28 + x4*x30 + x5*x6 + x5*x9 + x5*x12 + x5*x19 + x5*x20 + x5*x22 + x5*x23 + x5*x24 + x5*x29 + x5*x30 + x5*x31 + x5 + x6*x7 + x6*x9 + x6*x10 + x6*x11 + x6*x15 + x6*x17 + x6*x18 + x6*x20 + x6*x22 + x6*x24 + x6*x26 + x6*x27 + x6*x28 + x6*x29 + x6*x30 + x6 + x7*x8 + x7*x11 + x7*x12 + x7*x14 + x7*x15 + x7*x16 + x7*x17 + x7*x19 + x7*x21 + x7*x27 + x7*x28 + x7*x30 + x7*x31 + x7 + x8*x11 + x8*x12 + x8*x14 + x8*x16 + x8*x18 + x8*x19 + x8*x23 + x8*x25 + x8*x26 + x8*x29 + x9*x10 + x9*x12 + x9*x13 + x9*x16 + x9*x17 + x9*x19 + x9*x20 + x9*x25 + x9*x26 + x9*x27 + x9*x30 + x9 + x10*x16 + x10*x17 + x10*x19 + x10*x20 + x10*x27 + x10*x29 + x10*x30 + x10 + x11*x13 + x11*x16 + x11*x18 + x11*x20 + x11*x23 + x11*x26 + x11*x29 + x11*x31 + x11 + x12*x13 + x12*x16 + x12*x19 + x12*x20 + x12*x25 + x12*x26 + x12*x28 + x12*x29 + x12*x30 + x13*x15 + x13*x17 + x13*x22 + x13*x27 + x13*x28 + x13*x30 + x13*x31 + x13 + x14*x15 + x14*x16 + x14*x17 + x14*x20 + x14*x21 + x14*x24 + x14*x26 + x14*x29 + x14*x30 + x14*x31 + x14 + x15*x17 + x15*x18 + x15*x24 + x15*x26 + x15*x27 + x15*x31 + x15 + x16*x20 + x16*x22 + x16*x25 + x16*x28 + x16*x29 + x17*x18 + x17*x21 + x17*x22 + x17*x27 + x17*x28 + x18*x19 + x18*x20 + x18*x24 + x18*x26 + x18*x28 + x18*x30 + x18 + x19*x30 + x20*x21 + x20*x22 + x20*x23 + x20*x25 + x20*x26 + x20*x27 + x20*x28 + x20 + x21*x22 + x21*x25 + x21*x27 + x21*x28 + x21*x30 + x21*x31 + x22*x23 + x22*x24 + x22*x25 + x22*x26 + x22*x29 + x23*x24 + x23*x25 + x23*x26 + x23*x30 + x23*x31 + x24*x27 + x24*x31 + x24 + x25*x26 + x25*x27 + x25*x29 + x25*x31 + x25 + x26*x27 + x26*x31 + x27*x28 + x27*x30 + x27*x31 + x27 + x28*x29 + x28*x30 + x29*x31 + x30 + x31 + 1
x0*x1 + x0*x3 + x0*x5 + x0*x7 + x0*x8 + x0*x9 + x0*x13 + x0*x14 + x0*x17 + x0*x20 + x0*x22 + x0*x25 + x0*x27 + x0*x29 + x0*x30 + x0*x31 + x0 + x1*x4 + x1*x5 + x1*x6 + x1*x7 + x1*x10 + x1*x13 + x1*x15 + x1*x16 + x1*x21 + x1*x22 + x1*x23 + x1*x26 + x1*x28 + x1*x29 + x2*x4 + x2*x7 + x2*x8 + x2*x11 + x2*x15 + x2*x16 + x2*x20 + x2*x21 + x2*x24 + x2*x28 + x2*x29 + x2*x31 + x2 + x3*x5 + x3*x6 + x3*x10 + x3*x12 + x3*x13 + x3*x15 + x3*x16 + x3*x18 + x3*x19 + x3*x20 + x3*x22 + x3*x23 + x3*x25 + x3*x27 + x3*x28 + x3*x30 + x3*x31 + x3 + x4*x6 + x4*x11 + x4*x13 + x4*x14 + x4*x18 + x4*x21 + x4*x24 + x4*x25 + x4*x27 + x4*x29 + x4*x30 + x4 + x5*x6 + x5*x7 + x5*x9 + x5*x10 + x5*x13 + x5*x14 + x5*x16 + x5*x17 + x5*x20 + x5*x27 + x5*x28 + x5*x29 + x6*x7 + x6*x10 + x6*x13 + x6*x16 + x6*x17 + x6*x18 + x6*x19 + x6*x20 + x6*x22 + x6*x24 + x6*x25 + x6*x26 + x6*x30 + x6*x31 + x6 + x7*x8 + x7*x11 + x7*x12 + x7*x13 + x7*x17 + x7*x22 + x7*x23 + x7*x24 + x7*x27 + x7*x29 + x7*x30 + x7 + x8*x9 + x8*x10 + x8*x11 + x8*x17 + x8*x18 + x8*x19 + x8*x21 + x8*x24 + x8*x29 + x8 + x9*x13 + x9*x14 + x9*x16 + x9*x17 + x9*x18 + x9*x21 + x9*x26 + x9*x30 + x9*x31 + x10*x11 + x10*x12 + x10*x14 + x10*x18 + x10*x21 + x10*x23 + x10*x24 + x10*x25 + x10*x26 + x10*x27 + x10*x31 + x11*x13 + x11*x15 + x11*x17 + x11*x19 + x11*x20 + x11*x21 + x11*x23 + x11*x25 + x11*x29 + x11*x30 + x11*x31 + x11 + x12*x13 + x12*x14 + x12*x16 + x12*x17 + x12*x18 + x12*x22 + x12*x24 + x12*x26 + x12*x28 + x12*x29 + x12*x31 + x12 + x13*x16 + x13*x22 + x13*x26 + x13*x27 + x13*x28 + x13*x30 + x13*x31 + x14*x15 + x14*x17 + x14*x21 + x14*x24 + x14*x26 + x14*x27 + x14 + x15*x16 + x15*x18 + x15*x19 + x15*x20 + x15*x24 + x15*x26 + x15*x27 + x15*x28 + x15*x29 + x15*x30 + x15 + x16*x17 + x16*x18 + x16*x28 + x16*x30 + x16 + x17*x18 + x17*x19 + x17*x21 + x17*x22 + x17*x24 + x17*x28 + x17*x29 + x17*x31 + x17 + x18*x20 + x18*x21 + x18*x23 + x18*x24 + x18*x25 + x18*x26 + x18*x27 + x18*x28 + x18*x29 + x18*x30 + x18*x31 + x19*x22 + x19*x23 + x19*x24 + x19*x27 + x19*x28 + x19*x31 + x20*x21 + x20*x23 + x20*x27 + x20*x28 + x20*x29 + x20*x30 + x21*x22 + x21*x23 + x21*x24 + x21*x25 + x21*x27 + x21*x29 + x22*x23 + x22*x26 + x22*x27 + x22*x28 + x22*x30 + x23*x24 + x23*x26 + x23*x28 + x23*x29 + x23*x30 + x23 + x24*x26 + x24*x27 + x24*x29 + x24*x30 + x24*x31 + x25*x26 + x25*x27 + x25*x28 + x25*x31 + x25 + x26*x27 + x26*x28 + x26*x29 + x26*x30 + x26*x31 + x27*x28 + x27*x30 + x27*x31 + x28*x29 + x29*x30 + x29*x31 + x29 + x31
x0*x1 + x0*x3 + x0*x5 + x0*x6 + x0*x7 + x0*x10 + x0*x11 + x0*x12 + x0*x16 + x0*x17 + x0*x18 + x0*x19 + x0*x22 + x0*x23 + x0*x24 + x0*x25 + x0*x28 + x0 + x1*x2 + x1*x4 + x1*x9 + x1*x10 + x1*x12 + x1*x15 + x1*x16 + x1*x20 + x1*x23 + x1*x25 + x1*x28 + x1*x31 + x2*x4 + x2*x5 + x2*x6 + x2*x11 + x2*x13 + x2*x16 + x2*x17 + x2*x18 + x2*x20 + x2*x21 + x2*x22 + x2*x23 + x2*x24 + x2*x26 + x2*x27 + x2*x28 + x2*x31 + x3*x5 + x3*x6 + x3*x7 + x3*x8 + x3*x9 + x3*x11 + x3*x12 + x3*x13 + x3*x14 + x3*x16 + x3*x17 + x3*x18 + x3*x19 + x3*x20 + x3*x22 + x3*x23 + x3*x25 + x3*x27 + x3*x28 + x3*x29 + x3*x31 + x3 + x4*x5 + x4*x6 + x4*x7 + x4*x12 + x4*x16 + x4*x17 + x4*x18 + x4*x19 + x4*x26 + x4*x29 + x4*x31 + x5*x12 + x5*x13 + x5*x14 + x5*x16 + x5*x17 + x5*x22 + x5*x24 + x5*x26 + x5*x28 + x5*x29 + x5*x31 + x5 + x6*x9 + x6*x10 + x6*x13 + x6*x14 + x6*x15 + x6*x16 + x6*x17 + x6*x18 + x6*x19 + x6*x20 + x6*x21 + x6*x23 + x6*x24 + x6*x25 + x6*x27 + x6*x28 + x7*x8 + x7*x9 + x7*x10 + x7*x11 + x7*x13 + x7*x15 + x7*x16 + x7*x17 + x7*x27 + x7*x28 + x7*x29 + x7*x30 + x8*x11 + x8*x12 + x8*x13 + x8*x15 + x8*x17 + x8*x18 + x8*x19 + x8*x21 + x8*x22 + x8*x24 + x8*x25 + x8*x29 + x8*x30 + x8*x31 + x9*x13 + x9*x14 + x9*x20 + x9*x21 + x9*x25 + x9*x26 + x9*x27 + x9*x28 + x9*x29 + x9*x30 + x9*x31 + x10*x11 + x10*x13 + x10*x14 + x10*x15 + x10*x19 + x10*x22 + x10*x25 + x10*x26 + x10*x28 + x10*x29 + x10*x30 + x11*x14 + x11*x15 + x11*x17 + x11*x19 + x11*x20 + x11*x21 + x11*x22 + x11*x24 + x11*x25 + x11*x27 + x11*x30 + x11*x31 + x12*x14 + x12*x15 + x12*x16 + x12*x17 + x12*x18 + x12*x20 + x12*x22 + x12*x27 + x12*x30 + x13*x15 + x13*x18 + x13*x21 + x13*x28 + x13*x29 + x13*x31 + x14*x17 + x14*x18 + x14*x19 + x14*x20 + x14*x21 + x14*x23 + x14*x24 + x14*x25 + x14*x27 + x14*x28 + x14*x29 + x14*x30 + x15*x17 + x15*x19 + x15*x21 + x15*x22 + x15*x23 + x15*x24 + x15*x29 + x15*x30 + x15*x31 + x16*x17 + x16*x18 + x16*x20 + x16*x21 + x16*x22 + x16*x23 + x16*x25 + x16*x26 + x16*x29 + x16*x30 + x16*x31 + x16 + x17*x19 + x17*x20 + x17*x21 + x17*x26 + x17*x28 + x17*x29 + x17*x30 + x17*x31 + x18*x24 + x18*x27 + x18*x30 + x19*x20 + x19*x26 + x19*x28 + x19*x30 + x20*x21 + x20*x22 + x20*x24 + x20*x25 + x20*x28 + x20*x29 + x20*x30 + x21*x22 + x21*x23 + x21*x24 + x21*x25 + x21*x26 + x21*x27 + x21*x30 + x21*x31 + x22*x28 + x23*x28 + x23*x30 + x23 + x24*x27 + x24*x28 + x24*x30 + x25*x26 + x25*x27 + x25*x29 + x25*x31 + x25 + x26*x27 + x26*x28 + x26*x29 + x26*x31 + x27*x29 + x27 + x28*x30 + x28*x31 + x28 + x30
x0*x1 + x0*x2 + x0*x3 + x0*x8 + x0*x12 + x0*x14 + x0*x15 + x0*x18 + x0*x19 + x0*x21 + x0*x23 + x0*x26 + x0*x28 + x0*x29 + x0*x31 + x1*x2 + x1*x3 + x1*x4 + x1*x8 + x1*x9 + x1*x10 + x1*x11 + x1*x13 + x1*x14 + x1*x15 + x1*x20 + x1*x21 + x1*x22 + x1*x23 + x1*x25 + x1*x26 + x1*x27 + x1 + x2*x3 + x2*x4 + x2*x5 + x2*x9 + x2*x12 + x2*x18 + x2*x19 + x2*x20 + x2*x21 + x2*x24 + x2*x26 + x2*x28 + x2*x29 + x3*x4 + x3*x5 + x3*x6 + x3*x7 + x3*x9 + x3*x10 + x3*x11 + x3*x13 + x3*x15 + x3*x16 + x3*x17 + x3*x18 + x3*x19 + x3*x20 + x3*x21 + x3*x22 + x3*x23 + x3*x24 + x3*x25 + x3*x26 + x3*x27 + x3*x28 + x3*x30 + x3 + x4*x9 + x4*x10 + x4*x13 + x4*x15 + x4*x16 + x4*x17 + x4*x21 + x4*x22 + x4*x25 + x4*x26 + x4*x27 + x4 + x5*x6 + x5*x10 + x5*x11 + x5*x12 + x5*x13 + x5*x14 + x5*x15 + x5*x17 + x5*x19 + x5*x20 + x5*x21 + x5*x23 + x5*x24 + x5*x25 + x5*x27 + x5*x28 + x5*x29 + x5*x30 + x5 + x6*x8 + x6*x11 + x6*x12 + x6*x13 + x6*x16 + x6*x17 + x6*x19 + x6*x22 + x6*x23 + x6*x25 + x6*x26 + x6*x28 + x6*x29 + x6*x30 + x7*x9 + x7*x10 + x7*x14 + x7*x15 + x7*x17 + x7*x18 + x7*x20 + x7*x21 + x7*x22 + x7*x26 + x7*x31 + x7 + x8*x9 + x8*x12 + x8*x13 + x8*x15 + x8*x18 + x8*x20 + x8*x24 + x8*x26 + x8*x29 + x8*x30 + x8*x31 + x8 + x9*x13 + x9*x15 + x9*x18 + x9*x24 + x9*x30 + x9 + x10*x11 + x10*x13 + x10*x15 + x10*x16 + x10*x18 + x10*x20 + x10*x25 + x10*x26 + x10*x30 + x11*x14 + x11*x15 + x11*x16 + x11*x17 + x11*x21 + x11*x23 + x11*x24 + x11*x29 + x11*x30 + x11 + x12*x14 + x12*x16 + x12*x20 + x12*x21 + x12*x22 + x12*x23 + x12*x28 + x12*x29 + x12*x30 + x12 + x13*x14 + x13*x15 + x13*x16 + x13*x17 + x13*x19 + x13*x21 + x13*x24 + x13*x25 + x13*x30 + x13 + x14*x15 + x14*x16 + x14*x17 + x14*x19 + x14*x20 + x14*x25 + x14*x26 + x14*x28 + x14*x29 + x14*x30 + x14 + x15*x16 + x15*x18 + x15*x19 + x15*x20 + x15*x23 + x15*x24 + x15*x25 + x15*x26 + x15*x27 + x15*x29 + x15 + x16*x17 + x16*x19 + x16*x20 + x16*x22 + x16*x23 + x16*x25 + x16*x27 + x16*x29 + x16*x30 + x16 + x17*x22 + x17*x23 + x17*x27 + x18*x22 + x18*x23 + x18*x24 + x18*x25 + x18*x26 + x18*x29 + x18*x30 + x18 + x19*x20 + x19*x22 + x19*x23 + x19*x24 + x19*x25 + x19*x26 + x19*x30 + x19 + x20*x22 + x20*x26 + x20*x27 + x20*x28 + x21*x23 + x21*x25 + x21*x30 + x22*x23 + x22*x24 + x22*x25 + x22*x28 + x22*x30 + x22*x31 + x23*x25 + x23*x26 + x23*x27 + x23*x29 + x23*x30 + x23*x31 + x24*x25 + x24*x26 + x24*x31 + x25*x26 + x25*x28 + x25*x29 + x25*x30 + x25*x31 + x26*x28 + x26*x30 + x26*x31 + x27*x28 + x27*x31 + x27 + x28*x31 + x29*x31 + x29 + x30*x31 + x31
x0*x2 + x0*x3 + x0*x4 + x0*x5 + x0*x7 + x0*x9 + x0*x13 + x0*x14 + x0*x15 + x0*x18 + x0*x19 + x0*x20 + x0*x22 + x0*x23 + x0*x25 + x0*x26 + x0*x28 + x0*x30 + x0*x31 + x0 + x1*x2 + x1*x5 + x1*x6 + x1*x8 + x1*x9 + x1*x10 + x1*x11 + x1*x13 + x1*x14 + x1*x19 + x1*x22 + x1*x23 + x1*x24 + x1*x28 + x1*x29 + x1*x30 + x1 + x2*x4 + x2*x5 + x2*x6 + x2*x8 + x2*x9 + x2*x10 + x2*x11 + x2*x14 + x2*x16 + x2*x17 + x2*x18 + x2*x19 + x2*x22 + x2*x23 + x2*x26 + x2*x27 + x2 + x3*x5 + x3*x7 + x3*x8 + x3*x9 + x3*x10 + x3*x14 + x3*x16 + x3*x17 + x3*x18 + x3*x20 + x3*x21 + x3*x22 + x3*x23 + x3*x25 + x3*x28 + x3*x29 + x3 + x4*x5 + x4*x7 + x4*x10 + x4*x16 + x4*x18 + x4*x20 + x4*x22 + x4*x23 + x4*x24 + x4*x25 + x4*x26 + x4*x27 + x4*x28 + x4*x29 + x5*x7 + x5*x10 + x5*x11 + x5*x12 + x5*x13 + x5*x14 + x5*x15 + x5*x17 + x5*x19 + x5*x20 + x5*x21 + x5*x23 + x5*x25 + x5*x26 + x5*x27 + x5*x29 + x5*x30 + x6*x7 + x6*x8 + x6*x11 + x6*x15 + x6*x19 + x6*x21 + x6*x22 + x6*x25 + x6*x26 + x6*x29 + x6*x30 + x7*x9 + x7*x12 + x7*x16 + x7*x19 + x7*x20 + x7*x21 + x7*x23 + x7*x25 + x7*x30 + x7*x31 + x7 + x8*x10 + x8*x16 + x8*x17 + x8*x18 + x8*x19 + x8*x20 + x8*x24 + x8*x26 + x8*x27 + x8*x29 + x8*x31 + x8 + x9*x11 + x9*x13 + x9*x15 + x9*x16 + x9*x19 + x9*x20 + x9*x21 + x9*x25 + x9*x27 + x9*x29 + x9*x30 + x9*x31 + x10*x16 + x10*x17 + x10*x18 + x10*x19 + x10*x20 + x10*x21 + x10*x24 + x10*x26 + x10*x28 + x10*x31 + x11*x16 + x11*x23 + x11*x25 + x11*x26 + x11*x27 + x11*x29 + x11*x31 + x11 + x12*x13 + x12*x14 + x12*x15 + x12*x16 + x12*x18 + x12*x19 + x12*x20 + x12*x24 + x12*x25 + x12*x27 + x12*x29 + x12*x30 + x12 + x13*x14 + x13*x16 + x13*x18 + x13*x21 + x13*x22 + x13*x26 + x13*x27 + x13*x28 + x13*x29 + x13*x31 + x14*x17 + x14*x19 + x14*x23 + x14*x24 + x14*x26 + x14*x28 + x14*x29 + x14*x31 + x14 + x15*x17 + x15*x18 + x15*x19 + x15*x22 + x15*x25 + x15*x26 + x15*x27 + x15*x28 + x15*x30 + x15 + x16*x18 + x16*x20 + x16*x21 + x16*x23 + x16*x25 + x16*x29 + x16*x30 + x16*x31 + x17*x18 + x17*x19 + x17*x20 + x17*x22 + x17*x24 + x17*x25 + x17*x26 + x17*x27 + x17*x29 + x17*x30 + x17*x31 + x17 + x18*x19 + x18*x22 + x18*x24 + x18*x28 + x18*x29 + x18*x30 + x18 + x19*x20 + x19*x24 + x19*x25 + x19*x26 + x19*x27 + x19*x28 + x19*x29 + x19 + x20*x22 + x20*x25 + x20*x26 + x20 + x21*x22 + x21*x25 + x22*x29 + x22*x31 + x22 + x23*x27 + x23*x28 + x23*x29 + x23*x31 + x24*x25 + x24*x30 + x24*x31 + x25*x30 + x25*x31 + x25 + x26*x27 + x26*x28 + x26*x29 + x26*x31 + x27*x31 + x29*x30
x0*x1 + x0*x2 + x0*x3 + x0*x4 + x0*x8 + x0*x11 + x0*x12 + x0*x14 + x0*x16 + x0*x17 + x0*x19 + x0*x20 + x0*x21 + x0*x23 + x0*x24 + x0*x26 + x1*x2 + x1*x5 + x1*x6 + x1*x8 + x1*x12 + x1*x15 + x1*x18 + x1*x19 + x1*x21 + x1*x22 + x1*x23 + x1*x24 + x1*x26 + x1*x27 + x1*x28 + x1*x29 + x1*x31 + x1 + x2*x3 + x2*x5 + x2*x6 + x2*x8 + x2*x10 + x2*x18 + x2*x19 + x2*x21 + x2*x27 + x2*x28 + x2*x30 + x2 + x3*x6 + x3*x9 + x3*x10 + x3*x12 + x3*x14 + x3*x16 + x3*x20 + x3*x21 + x3*x25 + x3*x29 + x3*x31 + x4*x5 + x4*x10 + x4*x11 + x4*x12 + x4*x14 + x4*x15 + x4*x17 + x4*x18 + x4*x19 + x4*x20 + x4*x21 + x4*x22 + x4*x23 + x4*x24 + x4*x25 + x4*x26 + x4*x27 + x4*x28 + x5*x10 + x5*x12 + x5*x13 + x5*x14 + x5*x17 + x5*x18 + x5*x19 + x5*x20 + x5*x21 + x5*x22 + x5*x23 + x5*x30 + x5*x31 + x5 + x6*x7 + x6*x10 + x6*x11 + x6*x12 + x6*x15 + x6*x16 + x6*x19 + x6*x21 + x6*x22 + x6*x23 + x6*x24 + x6*x25 + x6*x27 + x6*x28 + x6 + x7*x9 + x7*x10 + x7*x12 + x7*x13 + x7*x14 + x7*x16 + x7*x18 + x7*x19 + x7*x22 + x7*x24 + x7*x25 + x7*x30 + x8*x11 + x8*x12 + x8*x13 + x8*x14 + x8*x15 + x8*x16 + x8*x19 + x8*x21 + x8*x22 + x8*x24 + x8*x27 + x8*x28 + x8*x31 + x8 + x9*x11 + x9*x12 + x9*x15 + x9*x17 + x9*x19 + x9*x21 + x9*x22 + x9*x26 + x9*x27 + x9*x28 + x9*x29 + x10*x12 + x10*x18 + x10*x19 + x10*x21 + x10*x23 + x10*x27 + x10*x30 + x10*x31 + x11*x12 + x11*x16 + x11*x18 + x11*x19 + x11*x20 + x11*x21 + x11*x23 + x11*x24 + x11*x26 + x11*x28 + x12*x13 + x12*x16 + x12*x18 + x12*x19 + x12*x20 + x12*x23 + x12*x24 + x12*x25 + x12*x27 + x12*x29 + x12*x31 + x12 + x13*x14 + x13*x15 + x13*x16 + x13*x17 + x13*x20 + x13*x21 + x13*x23 + x13*x24 + x13*x25 + x13*x26 + x13*x28 + x13*x30 + x14*x17 + x14*x18 + x14*x21 + x14*x23 + x14*x25 + x14*x27 + x14*x28 + x14*x30 + x14*x31 + x14 + x15*x18 + x15*x20 + x15*x21 + x15*x23 + x15*x24 + x15*x26 + x15*x28 + x15 + x16*x17 + x16*x18 + x16*x22 + x16*x23 + x16*x27 + x16*x30 + x16*x31 + x16 + x17*x19 + x17*x20 + x17*x21 + x17*x24 + x17*x25 + x17*x26 + x17*x27 + x17*x31 + x17 + x18*x20 + x18*x21 + x18*x24 + x18*x25 + x18*x27 + x18*x28 + x19*x26 + x19*x29 + x19*x31 + x19 + x20*x22 + x20*x25 + x20*x26 + x20*x29 + x20*x30 + x20*x31 + x21*x22 + x21*x23 + x21*x25 + x21*x27 + x21*x28 + x21*x30 + x21*x31 + x21 + x22*x23 + x22*x24 + x22*x25 + x22*x26 + x22*x27 + x22*x31 + x22 + x23*x24 + x23*x25 + x23*x27 + x23*x28 + x23*x31 + x23 + x24*x25 + x24*x26 + x24*x27 + x24*x29 + x24*x30 + x24*x31 + x25*x31 + x26*x28 + x26*x31 + x26 + x27*x31 + x28*x29 + x28*x30 + x29*x30 + x29 + x31 + 1
x0*x1 + x0*x2 + x0*x3 + x0*x5 + x0*x10 + x0*x11 + x0*x12 + x0*x17 + x0*x19 + x0*x20 + x0*x21 + x0*x22 + x0*x23 + x0*x24 + x0*x25 + x0*x28 + x0*x30 + x0*x31 + x0 + x1*x3 + x1*x7 + x1*x10 + x1*x11 + x1*x14 + x1*x15 + x1*x16 + x1*x18 + x1*x19 + x1*x20 + x1*x21 + x1*x23 + x1*x28 + x1*x30 + x1*x31 + x2*x3 + x2*x4 + x2*x5 + x2*x6 + x2*x9 + x2*x11 + x2*x14 + x2*x15 + x2*x16 + x2*x17 + x2*x18 + x2*x20 + x2*x21 + x2*x22 + x2*x23 + x2*x24 + x2*x25 + x2*x26 + x2*x28 + x2*x29 + x3*x5 + x3*x6 + x3*x8 + x3*x11 + x3*x12 + x3*x13 + x3*x14 + x3*x15 + x3*x17 + x3*x22 + x3*x23 + x3*x24 + x3*x25 + x3*x26 + x3*x27 + x3*x29 + x3*x30 + x4*x5 + x4*x6 + x4*x7 + x4*x9 + x4*x10 + x4*x11 + x4*x13 + x4*x16 + x4*x17 + x4*x21 + x4*x22 + x4*x25 + x4*x29 + x4*x30 + x5*x8 + x5*x12 + x5*x13 + x5*x15 + x5*x16 + x5*x20 + x5*x23 + x5*x25 + x5*x27 + x5*x30 + x5*x31 + x5 + x6*x8 + x6*x10 + x6*x11 + x6*x12 + x6*x13 + x6*x16 + x6*x18 + x6*x19 + x6*x20 + x6*x21 + x6*x22 + x6*x26 + x6*x27 + x6*x31 + x7*x10 + x7*x11 + x7*x15 + x7*x18 + x7*x20 + x7*x21 + x7*x25 + x7 + x8*x11 + x8*x12 + x8*x13 + x8*x15 + x8*x17 + x8*x20 + x8*x21 + x8*x22 + x8*x23 + x8*x25 + x8*x26 + x8*x27 + x8*x28 + x8*x31 + x8 + x9*x11 + x9*x13 + x9*x16 + x9*x19 + x9*x20 + x9*x22 + x9*x23 + x9*x24 + x9*x27 + x9*x28 + x9*x29 + x9 + x10*x18 + x10*x19 + x10*x20 + x10*x21 + x10*x23 + x10*x25 + x10*x27 + x10 + x11*x13 + x11*x15 + x11*x17 + x11*x18 + x11*x19 + x11*x21 + x11*x23 + x11*x24 + x11*x26 + x11*x29 + x11*x30 + x11 + x12*x13 + x12*x14 + x12*x17 + x12*x22 + x12*x23 + x12*x29 + x12*x30 + x12*x31 + x13*x20 + x13*x21 + x13*x23 + x13*x27 + x13*x29 + x13*x30 + x13 + x14*x15 + x14*x16 + x14*x17 + x14*x18 + x14*x20 + x14*x21 + x14*x23 + x14*x24 + x14*x28 + x15*x16 + x15*x18 + x15*x20 + x15*x21 + x15*x22 + x15*x24 + x15*x27 + x15*x30 + x15 + x16*x17 + x16*x20 + x16*x22 + x16*x25 + x16*x26 + x16*x27 + x16*x29 + x16*x31 + x17*x18 + x17*x19 + x17*x23 + x17*x26 + x17*x27 + x17*x28 + x17*x31 + x18*x19 + x18*x22 + x18*x23 + x18*x24 + x18*x25 + x18*x28 + x18*x29 + x18*x30 + x18*x31 + x19*x21 + x19*x22 + x19*x24 + x19*x25 + x19*x30 + x19*x31 + x20*x23 + x20*x24 + x20*x25 + x20*x31 + x21*x26 + x21*x27 + x21*x28 + x21*x30 + x21*x31 + x22*x24 + x22*x25 + x22*x30 + x22*x31 + x22 + x23*x24 + x23*x27 + x23*x29 + x23*x31 + x24*x27 + x24*x28 + x24*x30 + x24*x31 + x25*x27 + x25*x28 + x25 + x26*x28 + x26*x29 + x26*x30 + x26 + x27*x30 + x27*x31 + x28*x29 + x28*x30 + x28 + x29*x31 + x30
x0*x1 + x0*x2 + x0*x6 + x0*x7 + x0*x9 + x0*x13 + x0*x15 + x0*x16 + x0*x17 + x0*x18 + x0*x19 + x0*x20 + x0*x21 + x0*x25 + x0*x26 + x1*x2 + x1*x5 + x1*x6 + x1*x7 + x1*x8 + x1*x9 + x1*x14 + x1*x15 + x1*x17 + x1*x18 + x1*x19 + x1*x22 + x1*x23 + x1*x24 + x1*x27 + x1*x31 + x1 + x2*x7 + x2*x8 + x2*x9 + x2*x10 + x2*x11 + x2*x13 + x2*x14 + x2*x15 + x2*x17 + x2*x19 + x2*x20 + x2*x22 + x2*x23 + x2*x25 + x2*x26 + x2*x27 + x2*x29 + x2*x30 + x2*x31 + x2 + x3*x4 + x3*x5 + x3*x6 + x3*x8 + x3*x10 + x3*x12 + x3*x16 + x3*x17 + x3*x20 + x3*x21 + x3*x22 + x3*x23 + x3*x26 + x3*x29 + x3*x31 + x3 + x4*x5 + x4*x7 + x4*x10 + x4*x11 + x4*x14 + x4*x17 + x4*x21 + x4*x23 + x4*x24 + x4*x28 + x4*x29 + x4*x30 + x4*x31 + x4 + x5*x6 + x5*x10 + x5*x11 + x5*x12 + x5*x13 + x5*x14 + x5*x16 + x5*x17 + x5*x18 + x5*x19 + x5*x20 + x5*x24 + x5*x25 + x5*x27 + x5*x28 + x6*x7 + x6*x8 + x6*x9 + x6*x13 + x6*x15 + x6*x18 + x6*x19 + x6*x20 + x6*x21 + x6*x25 + x6*x27 + x7*x11 + x7*x14 + x7*x17 + x7*x21 + x7*x22 + x7*x23 + x7*x24 + x7*x28 + x7*x29 + x7*x31 + x8*x9 + x8*x10 + x8*x12 + x8*x13 + x8*x15 + x8*x17 + x8*x18 + x8*x20 + x8*x26 + x8*x27 + x8*x28 + x8*x31 + x9*x10 + x9*x11 + x9*x12 + x9*x13 + x9*x15 + x9*x18 + x9*x19 + x9*x24 + x9*x25 + x9*x26 + x9*x28 + x9*x31 + x10*x11 + x10*x13 + x10*x15 + x10*x17 + x10*x19 + x10*x22 + x10*x23 + x10*x25 + x10*x26 + x10*x27 + x10*x29 + x10*x30 + x10*x31 + x11*x16 + x11*x18 + x11*x26 + x11*x28 + x11*x29 + x12*x14 + x12*x18 + x12*x19 + x12*x21 + x12*x23 + x12*x24 + x12*x27 + x12*x28 + x12*x29 + x12*x30 + x13*x14 + x13*x17 + x13*x18 + x13*x19 + x13*x21 + x13*x22 + x13*x24 + x13*x28 + x13*x29 + x14*x17 + x14*x18 + x14*x19 + x14*x21 + x14*x22 + x14*x24 + x14*x25 + x14*x26 + x14*x27 + x14*x28 + x14*x30 + x14*x31 + x14 + x15*x16 + x15*x17 + x15*x20 + x15*x21 + x15*x22 + x15*x24 + x15*x25 + x15*x27 + x15*x28 + x15*x29 + x16*x19 + x16*x21 + x16*x22 + x16*x23 + x16*x26 + x16*x28 + x16*x31 + x16 + x17*x19 + x17*x20 + x17*x22 + x17*x24 + x17*x25 + x17*x26 + x17*x27 + x17*x30 + x17*x31 + x18*x20 + x18*x21 + x18*x23 + x18*x24 + x18*x25 + x18*x29 + x18*x30 + x18 + x19*x20 + x19*x21 + x19*x23 + x19*x25 + x19*x26 + x19*x27 + x19*x28 + x19*x31 + x20*x22 + x20*x23 + x20*x24 + x20*x27 + x20*x28 + x20*x29 + x20*x30 + x20*x31 + x20 + x21*x26 + x21*x27 + x21*x28 + x22*x23 + x22*x25 + x22*x26 + x22*x27 + x22*x30 + x22*x31 + x22 + x23*x25 + x23*x26 + x23*x28 + x23*x29 + x23*x31 + x23 + x24*x28 + x24*x30 + x24*x31 + x24 + x25*x26 + x25*x27 + x25*x28 + x25*x29 + x26*x27 + x26*x29 + x26*x30 + x26*x31 + x26 + x27*x29 + x29*x30 + x29*x31 + x30*x31 + x31 + 1
x0*x6 + x0*x9 + x0*x10 + x0*x11 + x0*x13 + x0*x15 + x0*x17 + x0*x20 + x0*x21 + x0*x23 + x0*x25 + x0*x26 + x0*x27 + x0*x28 + x0*x31 + x0 + x1*x2 + x1*x3 + x1*x5 + x1*x7 + x1*x9 + x1*x12 + x1*x13 + x1*x14 + x1*x15 + x1*x18 + x1*x19 + x1*x22 + x1*x23 + x1*x24 + x1*x25 + x1*x28 + x1*x29 + x1*x31 + x2*x3 + x2*x5 + x2*x6 + x2*x7 + x2*x10 + x2*x11 + x2*x13 + x2*x16 + x2*x17 + x2*x19 + x2*x20 + x2*x24 + x2*x27 + x2*x28 + x2*x29 + x3*x5 + x3*x10 + x3*x13 + x3*x15 + x3*x16 + x3*x21 + x3*x22 + x3*x26 + x4*x11 + x4*x13 + x4*x14 + x4*x15 + x4*x18 + x4*x21 + x4*x25 + x4*x28 + x5*x6 + x5*x7 + x5*x10 + x5*x11 + x5*x14 + x5*x27 + x5*x28 + x5*x29 + x5*x30 + x5*x31 + x6*x7 + x6*x9 + x6*x11 + x6*x12 + x6*x14 + x6*x15 + x6*x17 + x6*x18 + x6*x20 + x6*x21 + x6*x22 + x6*x24 + x6*x26 + x6*x28 + x6*x29 + x6*x30 + x7*x8 + x7*x10 + x7*x11 + x7*x15 + x7*x17 + x7*x19 + x7*x24 + x7*x25 + x7*x28 + x7*x30 + x7 + x8*x10 + x8*x11 + x8*x12 + x8*x15 + x8*x16 + x8*x17 + x8*x18 + x8*x19 + x8*x21 + x8*x22 + x8*x25 + x8*x26 + x8*x28 + x8*x29 + x8*x31 + x9*x10 + x9*x11 + x9*x12 + x9*x16 + x9*x17 + x9*x19 + x9*x20 + x9*x21 + x9*x22 + x9*x23 + x9*x25 + x9*x27 + x9*x28 + x9*x29 + x9 + x10*x12 + x10*x14 + x10*x16 + x10*x17 + x10*x18 + x10*x21 + x10*x23 + x10*x25 + x10*x26 + x10*x27 + x10*x28 + x11*x14 + x11*x21 + x11*x22 + x11*x26 + x11*x30 + x12*x15 + x12*x16 + x12*x20 + x12*x21 + x12*x22 + x12*x23 + x12*x29 + x12*x30 + x12 + x13*x14 + x13*x16 + x13*x17 + x13*x19 + x13*x20 + x13*x21 + x13*x23 + x13*x24 + x13*x25 + x13*x26 + x13*x27 + x13*x28 + x13 + x14*x15 + x14*x16 + x14*x17 + x14*x20 + x14*x21 + x14*x23 + x14*x25 + x14*x26 + x14*x27 + x14*x29 + x14*x31 + x14 + x15*x18 + x15*x22 + x15*x24 + x15*x26 + x15*x30 + x16*x18 + x16*x19 + x16*x26 + x16*x29 + x16*x31 + x17*x19 + x17*x20 + x17*x22 + x17*x23 + x17*x25 + x17*x26 + x17*x30 + x18*x19 + x18*x20 + x18*x21 + x18*x22 + x18*x23 + x18*x24 + x18*x25 + x18*x26 + x18*x27 + x18*x30 + x18*x31 + x18 + x19*x20 + x19*x23 + x19*x24 + x19*x25 + x19*x26 + x19*x29 + x19 + x20*x23 + x20*x24 + x20 + x21*x25 + x21*x28 + x21*x29 + x22*x23 + x22*x24 + x22*x25 + x22*x26 + x22*x27 + x22*x30 + x23*x25 + x23*x26 + x23*x27 + x23*x28 + x23*x29 + x23*x31 + x24*x25 + x24*x27 + x24*x28 + x24 + x25*x26 + x25*x27 + x25*x28 + x25*x29 + x26*x28 + x26*x30 + x26 + x27*x28 + x27*x29 + x27*x30 + x27 + x28*x31 + x28 + x29 + x30*x31 + x31 + 1
\ No newline at end of file
#include "monomial_new.h"
#include <string.h> // ffs
struct monomial_ctx_t
{
monomial_t *monomials;
int Nd[MAXDEG];
int D;
int n_var;
int v;
};
monomial_t monomial_one()
......@@ -15,7 +8,7 @@ monomial_t monomial_one()
return (monomial_t)0;
}
monomial_t monomial_var(int n)
monomial_t mkvar(int n)
{
monomial_t res = 1;
res = res << n;
......@@ -37,22 +30,21 @@ int monomial_degree(monomial_t a)
return hamming_weight(a);
}
void monomial_deconstruct(monomial_t a, int *vars, int nb_vars)
{
vars = malloc(sizeof(int) * nb_vars);
for (int i = 0; i < nb_vars; i++)
{
vars[i] = a%2;
a = a >> 1;
}
return ;
}
// void monomial_deconstruct(monomial_t a, int *vars, int nb_vars)
// {
// vars = malloc(sizeof(int) * nb_vars);
// for (int i = 0; i < nb_vars; i++)
// {
// vars[i] = a%2;
// a = a >> 1;
// }
// return ;
// }
void monomial_deconstruct(monomial_t a, int *vars, int nb_vars)
{
vars = malloc(sizeof(int) * nb_vars);
for (int i = 0; i < nb_vars; i++)
vars[nb_vars - i - 1] = a&(1<<i);
vars[nb_vars - i - 1] = (int)(((a&(1<<i))>>i));
return ;
}
......@@ -75,7 +67,7 @@ int monomial_getvar(monomial_t a)
return -1;
}
static int hamming_weight(monomial_t m)
int hamming_weight(monomial_t m)
{
return __builtin_popcountl(m) + __builtin_popcountl(m >> 64);
}
......@@ -96,7 +88,7 @@ static int binary_search(monomial_t target, int lo, int hi, struct monomial_ctx_
assert(0);
}
bool monomial_isvalid(const struct monomial_ctx_t *mono, monomial_t a)
bool monomial_isvalid(struct monomial_ctx_t *mono, monomial_t a)
{
monomial_t mask = 0;
for (int i = 1; i < mono->Nd[1]; i++)
......@@ -106,13 +98,13 @@ bool monomial_isvalid(const struct monomial_ctx_t *mono, monomial_t a)
return 0;
}
int monomial_rank(const struct monomial_ctx_t *mono, monomial_t a)
int monomial_rank(struct monomial_ctx_t *mono, monomial_t a)
{
int d = hamming_weight(a);
return binary_search(a, mono->Nd[d], mono->Nd[d + 1], mono);
}
monomial_t monomial_unrank(const struct monomial_ctx_t *mono, int n)
monomial_t monomial_unrank(struct monomial_ctx_t *mono, int n)
{
return mono->monomials[n];
}
......@@ -123,6 +115,29 @@ int monomial_rank_degD(int D, struct monomial_ctx_t *mono)
}
// enumerate in grlex order
static int monomial_enumerate(int degree, monomial_t *out, int n_var)
{
if (degree == 0) {
if (out != NULL)
out[0] = 0;
return 1;
}
int count = 0;
monomial_t top = mkvar(n_var);
monomial_t i = mkvar(degree) - 1;
while (i < top) {
if (out != NULL)
out[count] = i;
count++;
monomial_t minbit = i & -i; /* rightmost 1 bit */
monomial_t fillbit = (i + minbit) & ~i; /* rightmost 0 to the left of that bit */
i = (i + minbit) | ((fillbit / (minbit << 1)) - 1);
}
return count;
}
// enumerate in lex order
static int monomial_enumerate_lex(int degree, monomial_t *out, int n_var)
{
if (degree == 0) {
......@@ -153,9 +168,9 @@ static int monomial_enumerate_lex(int degree, monomial_t *out, int n_var)
}
static int monomial_rank_lex(monomial_t m, struct monomial_ctx_t *mono)
int monomial_rank_lex(monomial_t m, struct monomial_ctx_t *mono)
{
return binary_search(m, mono->Nd[0], mono->Nd[1], mono);
return binary_search(m, mono->Nd[0], mono->Nd[mono->n_var], mono);
}
......@@ -196,6 +211,21 @@ struct monomial_ctx_t *monomial_setup(int n_var, int v, int D)
return mono;
}
void test_lex(struct monomial_ctx_t *mono)
{
monomial_t tmp = -1;
for (int i = 0; i < mono->Nd[mono->n_var]; i++)
{
if (monomial_rank_lex(mono->monomials[i], mono) != i)
printf("Error in lex ranking\n");
if (hamming_weight(mono->monomials[i]) > 3)
printf("Error in hamming_weight lex\n");
if (mono->monomials[i] <= tmp)
printf("Error not in lexicographical order !\n");
tmp = mono->monomials[i];
}
// printf("test_lex :\nEZ\n");
}
static void monomial_setup_list_lex(struct monomial_ctx_t *mono)
{
......@@ -218,10 +248,9 @@ static void monomial_setup_list_lex(struct monomial_ctx_t *mono)
mono->monomials = alloc_array(mono->Nd[mono->n_var], sizeof(*(mono->monomials)), "monomial list");
mono->monomials[0] = 0;
for (int i = 1; i < mono->n_var; i++)
monomial_enumerate(D, mono->monomials + mono->Nd[i-1], i);
// test_grlex_order(mono);
// test_ranking(mono);
for (int i = 1; i <= mono->n_var; i++)
monomial_enumerate_lex(D, mono->monomials + mono->Nd[i-1], i);
test_lex(mono);
log(1, " - Monomials setup: %.1fs\n", wtime() - start);
}
......@@ -235,4 +264,14 @@ struct monomial_ctx_t *monomial_setup_lex(int n_var, int v, int D)
mono->n_var = n_var;
monomial_setup_list_lex(mono);
return mono;
}
\ No newline at end of file
}
void print_monomial(monomial_t m, struct monomial_ctx_t *mono)
{
int *vars = malloc(sizeof(int) * mono->n_var);
monomial_deconstruct(m, vars, mono->n_var);
for (int i = 0; i < mono->n_var; i++)
printf("%d", vars[i]);
printf("\n");
free(vars);
}
......@@ -6,7 +6,16 @@
#include <err.h>
typedef __int128 monomial_t;
struct monomial_ctx_t;
// struct monomial_ctx_t;
// For testing purpose, this is here
struct monomial_ctx_t
{
monomial_t *monomials;
int Nd[MAXDEG];
int D;
int n_var;
int v;
};
/* generic monomials */
......@@ -23,11 +32,17 @@ int monomial_getvar(monomial_t a);
/* ordered monomials */
struct monomial_ctx_t * monomial_setup_lex(int n_var, int D);
struct monomial_ctx_t * monomial_setup_lex(int n_var, int v, int D);
struct monomial_ctx_t * monomial_setup(int n_var, int v, int D);
bool monomial_isvalid(const struct monomial_ctx_t *mono, monomial_t a);
int monomial_rank(const struct monomial_ctx_t *mono, monomial_t a);
monomial_t monomial_unrank(const struct monomial_ctx_t *mono, int i);
int monomial_rank(struct monomial_ctx_t *mono, monomial_t a);
monomial_t monomial_unrank(struct monomial_ctx_t *mono, int n);
int monomial_rank_degD(int D, struct monomial_ctx_t *mono);
\ No newline at end of file
int monomial_rank_degD(int D, struct monomial_ctx_t *mono);
bool monomial_isvalid(struct monomial_ctx_t *mono, monomial_t a);
int monomial_rank_lex(monomial_t m, struct monomial_ctx_t *mono);
int hamming_weight(monomial_t m);
void print_monomial(monomial_t m, struct monomial_ctx_t *mono);
\ No newline at end of file
#include "monomial_new.h"
// void test_lex(struct monomial_ctx_t *mono)
// {
// monomial_t tmp = -1;
// for (int i = 0; i < mono->Nd[mono->n_var]; i++)
// {
// if (monomial_rank_lex(mono->monomials[i], mono) != i)
// printf("Erreur dans test_lex dans le rank\n");
// if (hamming_weight(mono->monomials[i]) > 3)
// printf("Erreur dans le hamming_weight\n");
// if (mono->monomials[i] <= tmp)
// printf("Erreur pas dans l'ordre lexicographique !\n");
// tmp = mono->monomials[i];
// }
// printf("test_lex :\nEZ\n");
// }
int main()
{
struct monomial_ctx_t *mono = monomial_setup_lex(6, 2, 3);
free(mono->monomials);
// test_lex(mono);
// for (int i = 0; i < mono->Nd[mono->n_var]; i++)
// print_monomial(mono->monomials[i], mono);
return (0);
}
\ No newline at end of file
......@@ -17,14 +17,6 @@ struct monomial_ctx_t
int v;
};
struct polynomial_system {
int n; /* # variables */
char ** variable_name; /* array of strings, size n */
int D; /* max degree of any monomial */
int m; /* # polynomials */
bool ** poly; /* array of polynomials, size m */
struct monomial_ctx * mono; /* description of the monomials */
};
static inline monomial_t mkvar(int i)
{
......@@ -133,9 +125,10 @@ bool monomial_is_bad(int index, struct monomial_ctx_t *mono)
int get_Nd(int d, struct monomial_ctx_t *mono)
{
if (d <= mono->D+1)
return mono->Nd[d];
errx(1, "deg in get_Nd too high");
// if (d <= mono->D+1)
// return mono->Nd[d];
// errx(1, "deg in get_Nd too high");
return mono->Nd[d];
}
void print_monomial(FILE *stream, int monomial, char **variable_name, struct monomial_ctx_t *mono)
......@@ -192,71 +185,186 @@ int create_monomial(int degree, int *vars, struct monomial_ctx_t *mono)
int *known_lin(struct polynomial_system *poly_sys)
// int *known_lin(struct polynomial_system *poly_sys)
// {
// int *res = (int *)malloc(sizeof(int) * poly_sys->mono->Nd[D+1]);
// monomial_t mask = 2**(poly_sys->v + 1) - 1;
// for (int i = 0; i < poly_sys->mono->Nd[D+1]; i++)
// {
// monomial_t tmp = poly_sys->mono->monomials[i];
// tmp &= mask;
// // non linear
// if (tmp == 0)
// res[i] = -1;
// else
// res[i] = ffs(tmp);
// }
// return res;
// }
// enumerate in lex order
static int monomial_enumerate_lex(int degree, monomial_t *out, int n_var)
{
int *res = (int *)malloc(sizeof(int) * poly_sys->mono->Nd[D+1]);
monomial_t mask = 2**(poly_sys->v + 1) - 1;
for (int i = 0; i < poly_sys->mono->Nd[D+1]; i++)
{
monomial_t tmp = poly_sys->mono->monomials[i];
tmp &= mask;
// non linear
if (tmp == 0)
res[i] = -1;
if (degree == 0) {
if (out != NULL)
out[0] = 0;
return 1;
}
int count = 0;
monomial_t top = mkvar(n_var);
monomial_t i = mkvar(n_var-1);
while (i < top) {
if (out != NULL)
out[count] = i;
count++;
if (hamming_weight(i) < degree)
i++;
else if (hamming_weight(i) == degree)
{
if (i%2 == 0)
i += i^(i & (i-1));
else
i++;
}
else
res[i] = ffs(tmp);
printf("Error in monomial_enumerate_lex\n");
}
return count;
}