Commit 0bd3e6df authored by Quentin HAMMERER's avatar Quentin HAMMERER
Browse files

Il faut faire un peu de bash pour rendre le script universel, et l'output en...

Il faut faire un peu de bash pour rendre le script universel, et l'output en parametre doit s'appeler 'mat'
parent d9fb902d
CC = gcc
CFLAGS = -std=c11 -g -Wall -Wextra -O3 -Wno-unused-parameter -Wno-maybe-uninitialized -Werror -march=native
# OpenMP
CFLAGS += -fopenmp
LDFLAGS += -fopenmp
LDLIBS += -lm
all: macaulay_gen
macaulay_gen: parser.o tools.o macaulay_gen.o
macaulay_gen: LDLIBS += `pkg-config --libs m4ri`
parser.o: parser.h
tools.o: tools.h
macaulay_gen.o: parser.h tools.h
macaulay_gen.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
#!/bin/bash
echo "Start script"
rm -rf my_mat/ ker.bin
mkdir my_mat
mv mat.bin my_mat/
mv mat.cw.bin my_mat/
mv mat.rw.bin my_mat/
~/stage/cado-nfs-master/build/poste-almasty-02/linalg/bwc/./bwc.pl :complete balancing_options="reorder=columns" matrix=`pwd`/my_mat/mat.bin mn=64
cp my_mat/mat.bin-1x1/W ker.bin
echo "End script"
\ No newline at end of file
a, b, c
a
a*b
a*c
b
b*c
c
a*b + a*c + b*c + a + b + c + 1
\ No newline at end of file
File added
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
// TODO : il faudrait tester ceci
#define _POSIX_C_SOURCE 200809L // for strdup
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <err.h>
#include <getopt.h>
#include <inttypes.h>
#include <assert.h>
#include <string.h> // strcmp, strdup
#include <sys/time.h> // gettimeofday
#include <m4ri/m4ri.h>
#include "parser.h"
#include "tools.h"
// typedef __int128 u128;
// typedef uint64_t u64;
// typedef uint32_t u32;
// typedef uint16_t u16;
/*
* This program generates a degree-D macaulay matrix from a quadratic system,
* where columns corresponding to monomials having degree at most one in certain
* variables have been removed. Finding vectors in the left-kernel of the matrix
* is the basis of the crossbred algorithm.
*/
//#define MAXDEG 8
int n; /* number of variables */
int v; /* number of non-enumerated variables (the first ones) */
int m; /* number of polynomials */
int D;
extern int Nd[MAXDEG]; /* number of degree-d monomials */
int log_level = 99;
#define log(level, fmt, ...) \
do { if (level < log_level) fprintf(stderr, fmt, ##__VA_ARGS__); } while (0)
double wtime()
{
struct timeval ts;
gettimeofday(&ts, NULL);
return (double)ts.tv_sec + ts.tv_usec / 1e6;
}
/* represent n in 4 bytes */
void human_format(u64 n, char *target) {
if (n < 1000) {
sprintf(target, "%" PRId64, n);
return;
}
if (n < 1000000) {
sprintf(target, "%.1fK", n / 1e3);
return;
}
if (n < 1000000000) {
sprintf(target, "%.1fM", n / 1e6);
return;
}
if (n < 1000000000000ll) {
sprintf(target, "%.1fG", n / 1e9);
return;
}
if (n < 1000000000000000ll) {
sprintf(target, "%.1fT", n / 1e12);
return;
}
}
void * alloc_array(u64 n_entries, u64 entry_size, const char *role)
{
void *A = malloc(entry_size * n_entries);
if (A == NULL)
err(1, "cannot allocate %s", role);
return A;
}
void write_array(const char *filename, const int *A, int size)
{
log(1, " - writing %s\n", filename);
FILE *file = fopen(filename, "w");
if (file == NULL)
errx(1, "cannot open %s", filename);
size_t check = fwrite(A, sizeof(*A), size, file);
if (check != (size_t) size)
err(1, "error writing %s", filename);
fclose(file);
}
/*********************** parser interface ************************/
struct parser_monomial_t {
int degree;
int vars[2];
struct parser_monomial_t * next;
};
struct parser_poly_t {
struct parser_monomial_t * terms_head;
struct parser_monomial_t * terms_tail;
struct parser_poly_t * next;
};
char ** variable_name;
struct parser_poly_t * poly_head;
struct parser_poly_t * poly_tail;
struct parser_monomial_t * new_monomial()
{
struct parser_monomial_t *m = malloc(sizeof(*m));
m->degree = 0;
m->next = NULL;
return m;
}
struct parser_poly_t * new_polynomial()
{
struct parser_poly_t * p = malloc(sizeof(*p));
p->next = NULL;
// allocate dummy monomial
struct parser_monomial_t *dummy = new_monomial();
p->terms_head = dummy;
p->terms_tail = dummy;
return p;
}
bool polynomial_started = false;
/* callbacks */
void parser_setup(void *opaque, int nvar, const char **vars)
{
n = nvar;
variable_name = malloc(n * sizeof(char *));
for (int i = 0; i < n; i++)
variable_name[i] = strdup(vars[i]);
// allocate dummy polynomial
struct parser_poly_t *dummy = new_polynomial();
poly_head = dummy;
poly_tail = dummy;
polynomial_started = false;
}
void parser_store_monomial(void *opaque, int line, int column, int degree, const int *variables)
{
if (degree > 2)
errx(1, "This program only supports quadratic polynomials (degree-%d term on line %d)", degree, line);
if (!polynomial_started) {
struct parser_poly_t *n = new_polynomial();
poly_tail->next = n;
poly_tail = n;
polynomial_started = true;
}
struct parser_poly_t *p = poly_tail;
// build the monomial
struct parser_monomial_t * m = new_monomial();
m->degree = degree;
for (int i = 0; i < degree; i++)
m->vars[i] = variables[i];
// store the monomial
p->terms_tail->next = m;
p->terms_tail = m;
}
void parser_store_polynomial(void *opaque, int line)
{
polynomial_started = false;
m += 1;
}
/*********************** monomial numbering *************************/
/*
* Monomials are numbered from 0 to sum(binomial(n, i), i=0..D). The main operation
* we have to provide is multiplication by a single variable (for all monomials except
* those of the greatest degree).
*
* Degree-d monomials are in monomials[Nd[d]:Nd[d + 1]].
* The number of monomials of degree <= d is Nd[d + 1].
* This is NOT a monomial order : a<b but a*b > b*b
*
* "bad" monomial contain more than one special variable.
* bad_renumbering[j] == -1 if j is a good monomial
* bad_renumbering[j] == i (>= 0) if j is the i-th bad monomial
*/
typedef u128 monomial_t;
extern monomial_t *monomials; /* array to rank/unrank monomials */
monomial_t vmask; /* monomial that contains all special variables */
int nbad; /* total number of bad monomials */
int *bad_renumbering; /* renumber the bad monomials consecutively */
int *inv_bad_renumbering; /* renumber the bad monomials consecutively */
static inline monomial_t mkvar(int i)
{
return ((monomial_t) 1) << i;
}
void print_monomial(FILE *stream, monomial_t m)
{
int v[n];
int d = 0;
for (int i = 0; i < n; i++) {
if (m & mkvar(i)) {
v[d] = i;
d++;
}
}
if (d == 0) {
fprintf(stream, "1");
} else {
for (int i = 0; i < d - 1; i++)
fprintf(stream, "%s*", variable_name[v[i]]);
fprintf(stream, "%s", variable_name[v[d - 1]]);
}
}
// /* returns the position of target under the assumption that it is in monomials[lo:hi] */
// int binary_search(monomial_t target, int lo, int hi)
// {
// hi -= 1;
// while (lo <= hi) {
// int mid = (lo + hi) / 2;
// if (target > monomials[mid])
// lo = mid + 1;
// else if (target < monomials[mid])
// hi = mid - 1;
// else
// return mid;
// }
// assert(0);
// }
// int hamming_weight(monomial_t m)
// {
// return __builtin_popcountl(m) + __builtin_popcountl(m >> 64);
// }
void test_shift_128()
{
for (int i = 0; i < 128; i++) {
monomial_t x = 1;
x <<= i;
monomial_t y = mkvar(i);
assert(x == y);
}
}
void test_HW()
{
for (int i = 0; i < 128; i++)
assert(hamming_weight(mkvar(i)) == 1);
for (int i = 0; i < 128; i++)
for (int j = 0; j < i; j++)
assert(hamming_weight(mkvar(i) + mkvar(j)) == 2);
}
// int monomial_rank(monomial_t m)
// {
// int d = hamming_weight(m);
// return binary_search(m, Nd[d], Nd[d + 1]);
// }
void test_ranking()
{
for (int i = 0; i < Nd[D + 1]; i++)
assert(monomial_rank(monomials[i]) == i);
}
/* Variants of this code enumerate monomials of degree <= D in lex order */
int monomial_enumerate(int degree, monomial_t *out)
{
if (degree == 0) {
if (out != NULL)
out[0] = 0;
return 1;
}
int count = 0;
monomial_t top = mkvar(n);
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;
}
void test_grlex_order()
{
assert(hamming_weight(monomials[0]) == 0);
for (int i = 0; i < n; i++)
assert(hamming_weight(monomials[1 + i]) == 1);
for (int d = 0; d <= D; d++)
for (int k = Nd[d]; k < Nd[d + 1] - 1; k++) {
assert(hamming_weight(monomials[k]) == d);
assert(monomials[k] < monomials[k + 1]);
}
}
/* returns true when m contains more than one special variable */
static inline bool monomial_is_bad(monomial_t m)
{
monomial_t inter = m & vmask;
return (inter & (inter - 1)) != 0;
}
void test_bad_monomials()
{
assert(bad_renumbering[0] < 0);
for (int i = 0; i < n; i++) {
assert(bad_renumbering[i + 1] < 0);
}
for (int i = 0; i < v; i++)
for (int j = 0; j < i; j++)
assert(monomial_is_bad(mkvar(i) | mkvar(j)));
for (int i = v; i < n; i++)
for (int j = 0; j < i; j++)
assert(!monomial_is_bad(mkvar(i) | mkvar(j)));
}
void monomial_setup_list()
{
assert(D >= 2);
double start = wtime();
vmask = (v == 0) ? 0 : mkvar(v) - 1;
log(0, "Monomials setup\n");
log(1, " - Counting monomials\n");
Nd[0] = 0;
for (int d = 0; d <= D; d++) {
int binom_n_d = monomial_enumerate(d, NULL); /* not the smartest way to do the job... */
Nd[d + 1] = Nd[d] + binom_n_d;
log(2, " - %d monomials of degree %d\n", binom_n_d, d);
}
log(1, " - Building monomial list\n");
monomials = alloc_array(Nd[D + 1], sizeof(*monomials), "monomial list");
for (int d = 0; d <= D; d++)
monomial_enumerate(d, &monomials[Nd[d]]);
test_grlex_order();
test_ranking();
log(1, " - Singling out bad monomials\n");
bad_renumbering = alloc_array(Nd[D + 1], sizeof(*bad_renumbering), "bad monomial renumbering");
inv_bad_renumbering = alloc_array(Nd[D + 1], sizeof(*bad_renumbering), "bad monomial renumbering");
for (int j = 0; j < Nd[D + 1]; j++) {
bool bad = monomial_is_bad(monomials[j]);
bad_renumbering[j] = bad ? nbad : -1;
inv_bad_renumbering[nbad] = j;
nbad += bad;
}
log(2, " - %d bad monomials\n", nbad);
test_bad_monomials();
log(1, " - Monomials setup: %.1fs\n", wtime() - start);
}
/******************************* input system in nicer form *****************************/
// struct input_poly_t {
// int nterms;
// int terms[8257]; /* ok for 128 variables */
// };
extern struct input_poly_t * input_system;
void convert_input_system()
{
input_system = malloc(m * sizeof(*input_system));
if (input_system == NULL)
errx(1, "cannot allocate input system");
int i = 0;
struct parser_poly_t *head = poly_head->next;
for (struct parser_poly_t * p = head; p != NULL; p = p->next) {
int size = 0;
struct parser_monomial_t *head = p->terms_head->next;
for (struct parser_monomial_t *m = head; m != NULL; m = m->next) {
if (size == 8257)
errx(1, "stupid polynomial is too long (shouldn't happen with <= 128 variables)");
monomial_t term = 0;
for (int i = 0; i < m->degree; i++)
term += mkvar(m->vars[i]);
int mon = monomial_rank(term);
assert(hamming_weight(monomials[mon]) <= 2);
assert(mon < Nd[3]);
input_system[i].terms[size] = mon;
size += 1;
}
input_system[i].nterms = size;
i += 1;
}
}
void system_to_txt(FILE *dest, struct output_poly_t *sys, int size)
{
for (int i = 0; i < n; i++)
{
if (i != 0)
fprintf(dest, ", ");
fprintf(dest, "%s",variable_name[i]);
}
fprintf(dest, "\n");
for (int i = 0; i < size; i++)
{
int j;
for (j = 0; j < sys[i].nterms-1; j++)
{
print_monomial(dest, sys[i].terms[j]);
fprintf(dest, " + ");
}
print_monomial(dest, sys[i].terms[j]);
fprintf(dest, "\n");
}
}
/********************************** output buffering ********************************/
int buffer_capacity;
int buffer_size;
int * buffer;
u64 words_written;
int rows_written;
FILE * buffer_stream;
void output_setup()
{
rows_written = 0;
words_written = 0;
buffer_capacity = 1024*256;
buffer_size = 0;
buffer = alloc_array(buffer_capacity, sizeof(*buffer),"output buffer");
}
void flush_buffer()
{
if (buffer_stream != NULL) {
/* flush the old buffer to disk */
size_t check = fwrite(buffer, sizeof(*buffer), buffer_size, buffer_stream);
if (check != (size_t) buffer_size)
errx(1, "error when writing to disk");
}
buffer_size = 0;
}
/* write a row to the matrix file; return the row number */
int buffer_write_row(int row_size, int *row)
{
int i = -1;
//#pragma omp critical(buffer)
//{
i = rows_written;
rows_written += 1;
/* getting this out of the critical section requires the
use of an RCU-like mechanism */
if (buffer_size + row_size + 1 < buffer_capacity)
flush_buffer();
buffer[buffer_size] = row_size;
buffer_size += 1;
for (int k = 0; k < row_size; k++)
buffer[buffer_size + k] = row[k];
buffer_size += row_size;
words_written += row_size + 1;
//}
return i;
}
/********************************** sparse matrix ***********************************/