Iterative Strassen Algorithm

472 Views Asked by At

I'm working on Parallel Programming and as part of a project (this is not homework) I'm trying to implement an iterative form of Strassens Algorithm using loops.

I understand how the recursive formulation works (credit to this and this), however I haven't found any resources (blogs or scientific literature) about an iterative formulation of the algorithm. I wanted to know if there's anyone here willing to share resources or implemented their own iterative version of the algorithm.

Thank you.

1

There are 1 best solutions below

0
On

Try to parallelize the following $8\times8\times8$ algorithm which is equivalent to a three-layer recursion of Strassen's $2\times2\times2$ algorithm:

P01 := (a11+a22+a33+a44+a55+a66+a77+a88) * (b11+b22+b33+b44+b55+b66+b77+b88);
P02 := (a21+a22+a43+a44+a65+a66+a87+a88) * (b11+b33+b55+b77);
P03 := (a11+a33+a55+a77) * (b12-b22+b34-b44+b56-b66+b78-b88);
P04 := (a22+a44+a66+a88) * (-b11+b21-b33+b43-b55+b65-b77+b87);
P05 := (a11+a12+a33+a34+a55+a56+a77+a78) * (b22+b44+b66+b88);
P06 := (-a11+a21-a33+a43-a55+a65-a77+a87) * (b11+b12+b33+b34+b55+b56+b77+b78);
P07 := (a12-a22+a34-a44+a56-a66+a78-a88) * (b21+b22+b43+b44+b65+b66+b87+b88);
P08 := (a31+a33+a42+a44+a75+a77+a86+a88) * (b11+b22+b55+b66);
P09 := (a41+a42+a43+a44+a85+a86+a87+a88) * (b11+b55);
P10 := (a31+a33+a75+a77) * (b12-b22+b56-b66);
P11 := (a42+a44+a86+a88) * (-b11+b21-b55+b65);
P12 := (a31+a32+a33+a34+a75+a76+a77+a78) * (b22+b66);
P13 := (-a31-a33+a41+a43-a75-a77+a85+a87) * (b11+b12+b55+b56);
P14 := (a32+a34-a42-a44+a76+a78-a86-a88) * (b21+b22+b65+b66);
P15 := (a11+a22+a55+a66) * (b13+b24-b33-b44+b57+b68-b77-b88);
P16 := (a21+a22+a65+a66) * (b13-b33+b57-b77);
P17 := (a11+a55) * (b14-b24-b34+b44+b58-b68-b78+b88);
P18 := (a22+a66) * (-b13+b23+b33-b43-b57+b67+b77-b87);
P19 := (a11+a12+a55+a56) * (b24-b44+b68-b88);
P20 := (-a11+a21-a55+a65) * (b13+b14-b33-b34+b57+b58-b77-b78);
P21 := (a12-a22+a56-a66) * (b23+b24-b43-b44+b67+b68-b87-b88);
P22 := (a33+a44+a77+a88) * (-b11-b22+b31+b42-b55-b66+b75+b86);
P23 := (a43+a44+a87+a88) * (-b11+b31-b55+b75);
P24 := (a33+a77) * (-b12+b22+b32-b42-b56+b66+b76-b86);
P25 := (a44+a88) * (b11-b21-b31+b41+b55-b65-b75+b85);
P26 := (a33+a34+a77+a78) * (-b22+b42-b66+b86);
P27 := (-a33+a43-a77+a87) * (-b11-b12+b31+b32-b55-b56+b75+b76);
P28 := (a34-a44+a78-a88) * (-b21-b22+b41+b42-b65-b66+b85+b86);
P29 := (a11+a13+a22+a24+a55+a57+a66+a68) * (b33+b44+b77+b88);
P30 := (a21+a22+a23+a24+a65+a66+a67+a68) * (b33+b77);
P31 := (a11+a13+a55+a57) * (b34-b44+b78-b88);
P32 := (a22+a24+a66+a68) * (-b33+b43-b77+b87);
P33 := (a11+a12+a13+a14+a55+a56+a57+a58) * (b44+b88);
P34 := (-a11-a13+a21+a23-a55-a57+a65+a67) * (b33+b34+b77+b78);
P35 := (a12+a14-a22-a24+a56+a58-a66-a68) * (b43+b44+b87+b88);
P36 := (-a11-a22+a31+a42-a55-a66+a75+a86) * (b11+b13+b22+b24+b55+b57+b66+b68);
P37 := (-a21-a22+a41+a42-a65-a66+a85+a86) * (b11+b13+b55+b57);
P38 := (-a11+a31-a55+a75) * (b12+b14-b22-b24+b56+b58-b66-b68);
P39 := (-a22+a42-a66+a86) * (-b11-b13+b21+b23-b55-b57+b65+b67);
P40 := (-a11-a12+a31+a32-a55-a56+a75+a76) * (b22+b24+b66+b68);
P41 := (a11-a21-a31+a41+a55-a65-a75+a85) * (b11+b12+b13+b14+b55+b56+b57+b58);
P42 := (-a12+a22+a32-a42-a56+a66+a76-a86) * (b21+b22+b23+b24+b65+b66+b67+b68);
P43 := (a13+a24-a33-a44+a57+a68-a77-a88) * (b31+b33+b42+b44+b75+b77+b86+b88);
P44 := (a23+a24-a43-a44+a67+a68-a87-a88) * (b31+b33+b75+b77);
P45 := (a13-a33+a57-a77) * (b32+b34-b42-b44+b76+b78-b86-b88);
P46 := (a24-a44+a68-a88) * (-b31-b33+b41+b43-b75-b77+b85+b87);
P47 := (a13+a14-a33-a34+a57+a58-a77-a78) * (b42+b44+b86+b88);
P48 := (-a13+a23+a33-a43-a57+a67+a77-a87) * (b31+b32+b33+b34+b75+b76+b77+b78);
P49 := (a14-a24-a34+a44+a58-a68-a78+a88) * (b41+b42+b43+b44+b85+b86+b87+b88);
P50 := (a51+a55+a62+a66+a73+a77+a84+a88) * (b11+b22+b33+b44);
P51 := (a61+a62+a65+a66+a83+a84+a87+a88) * (b11+b33);
P52 := (a51+a55+a73+a77) * (b12-b22+b34-b44);
P53 := (a62+a66+a84+a88) * (-b11+b21-b33+b43);
P54 := (a51+a52+a55+a56+a73+a74+a77+a78) * (b22+b44);
P55 := (-a51-a55+a61+a65-a73-a77+a83+a87) * (b11+b12+b33+b34);
P56 := (a52+a56-a62-a66+a74+a78-a84-a88) * (b21+b22+b43+b44);
P57 := (a71+a73+a75+a77+a82+a84+a86+a88) * (b11+b22);
P58 := (a81+a82+a83+a84+a85+a86+a87+a88) * (b11);
P59 := (a71+a73+a75+a77) * (b12-b22);
P60 := (a82+a84+a86+a88) * (-b11+b21);
P61 := (a71+a72+a73+a74+a75+a76+a77+a78) * (b22);
P62 := (-a71-a73-a75-a77+a81+a83+a85+a87) * (b11+b12);
P63 := (a72+a74+a76+a78-a82-a84-a86-a88) * (b21+b22);
P64 := (a51+a55+a62+a66) * (b13+b24-b33-b44);
P65 := (a61+a62+a65+a66) * (b13-b33);
P66 := (a51+a55) * (b14-b24-b34+b44);
P67 := (a62+a66) * (-b13+b23+b33-b43);
P68 := (a51+a52+a55+a56) * (b24-b44);
P69 := (-a51-a55+a61+a65) * (b13+b14-b33-b34);
P70 := (a52+a56-a62-a66) * (b23+b24-b43-b44);
P71 := (a73+a77+a84+a88) * (-b11-b22+b31+b42);
P72 := (a83+a84+a87+a88) * (-b11+b31);
P73 := (a73+a77) * (-b12+b22+b32-b42);
P74 := (a84+a88) * (b11-b21-b31+b41);
P75 := (a73+a74+a77+a78) * (-b22+b42);
P76 := (-a73-a77+a83+a87) * (-b11-b12+b31+b32);
P77 := (a74+a78-a84-a88) * (-b21-b22+b41+b42);
P78 := (a51+a53+a55+a57+a62+a64+a66+a68) * (b33+b44);
P79 := (a61+a62+a63+a64+a65+a66+a67+a68) * (b33);
P80 := (a51+a53+a55+a57) * (b34-b44);
P81 := (a62+a64+a66+a68) * (-b33+b43);
P82 := (a51+a52+a53+a54+a55+a56+a57+a58) * (b44);
P83 := (-a51-a53-a55-a57+a61+a63+a65+a67) * (b33+b34);
P84 := (a52+a54+a56+a58-a62-a64-a66-a68) * (b43+b44);
P85 := (-a51-a55-a62-a66+a71+a75+a82+a86) * (b11+b13+b22+b24);
P86 := (-a61-a62-a65-a66+a81+a82+a85+a86) * (b11+b13);
P87 := (-a51-a55+a71+a75) * (b12+b14-b22-b24);
P88 := (-a62-a66+a82+a86) * (-b11-b13+b21+b23);
P89 := (-a51-a52-a55-a56+a71+a72+a75+a76) * (b22+b24);
P90 := (a51+a55-a61-a65-a71-a75+a81+a85) * (b11+b12+b13+b14);
P91 := (-a52-a56+a62+a66+a72+a76-a82-a86) * (b21+b22+b23+b24);
P92 := (a53+a57+a64+a68-a73-a77-a84-a88) * (b31+b33+b42+b44);
P93 := (a63+a64+a67+a68-a83-a84-a87-a88) * (b31+b33);
P94 := (a53+a57-a73-a77) * (b32+b34-b42-b44);
P95 := (a64+a68-a84-a88) * (-b31-b33+b41+b43);
P96 := (a53+a54+a57+a58-a73-a74-a77-a78) * (b42+b44);
P97 := (-a53-a57+a63+a67+a73+a77-a83-a87) * (b31+b32+b33+b34);
P98 := (a54+a58-a64-a68-a74-a78+a84+a88) * (b41+b42+b43+b44);
P99 := (a11+a22+a33+a44) * (b15+b26+b37+b48-b55-b66-b77-b88);
P100 := (a21+a22+a43+a44) * (b15+b37-b55-b77);
P101 := (a11+a33) * (b16-b26+b38-b48-b56+b66-b78+b88);
P102 := (a22+a44) * (-b15+b25-b37+b47+b55-b65+b77-b87);
P103 := (a11+a12+a33+a34) * (b26+b48-b66-b88);
P104 := (-a11+a21-a33+a43) * (b15+b16+b37+b38-b55-b56-b77-b78);
P105 := (a12-a22+a34-a44) * (b25+b26+b47+b48-b65-b66-b87-b88);
P106 := (a31+a33+a42+a44) * (b15+b26-b55-b66);
P107 := (a41+a42+a43+a44) * (b15-b55);
P108 := (a31+a33) * (b16-b26-b56+b66);
P109 := (a42+a44) * (-b15+b25+b55-b65);
P110 := (a31+a32+a33+a34) * (b26-b66);
P111 := (-a31-a33+a41+a43) * (b15+b16-b55-b56);
P112 := (a32+a34-a42-a44) * (b25+b26-b65-b66);
P113 := (a11+a22) * (b17+b28-b37-b48-b57-b68+b77+b88);
P114 := (a21+a22) * (b17-b37-b57+b77);
P115 := (a11) * (b18-b28-b38+b48-b58+b68+b78-b88);
P116 := (a22) * (-b17+b27+b37-b47+b57-b67-b77+b87);
P117 := (a11+a12) * (b28-b48-b68+b88);
P118 := (-a11+a21) * (b17+b18-b37-b38-b57-b58+b77+b78);
P119 := (a12-a22) * (b27+b28-b47-b48-b67-b68+b87+b88);
P120 := (a33+a44) * (-b15-b26+b35+b46+b55+b66-b75-b86);
P121 := (a43+a44) * (-b15+b35+b55-b75);
P122 := (a33) * (-b16+b26+b36-b46+b56-b66-b76+b86);
P123 := (a44) * (b15-b25-b35+b45-b55+b65+b75-b85);
P124 := (a33+a34) * (-b26+b46+b66-b86);
P125 := (-a33+a43) * (-b15-b16+b35+b36+b55+b56-b75-b76);
P126 := (a34-a44) * (-b25-b26+b45+b46+b65+b66-b85-b86);
P127 := (a11+a13+a22+a24) * (b37+b48-b77-b88);
P128 := (a21+a22+a23+a24) * (b37-b77);
P129 := (a11+a13) * (b38-b48-b78+b88);
P130 := (a22+a24) * (-b37+b47+b77-b87);
P131 := (a11+a12+a13+a14) * (b48-b88);
P132 := (-a11-a13+a21+a23) * (b37+b38-b77-b78);
P133 := (a12+a14-a22-a24) * (b47+b48-b87-b88);
P134 := (-a11-a22+a31+a42) * (b15+b17+b26+b28-b55-b57-b66-b68);
P135 := (-a21-a22+a41+a42) * (b15+b17-b55-b57);
P136 := (-a11+a31) * (b16+b18-b26-b28-b56-b58+b66+b68);
P137 := (-a22+a42) * (-b15-b17+b25+b27+b55+b57-b65-b67);
P138 := (-a11-a12+a31+a32) * (b26+b28-b66-b68);
P139 := (a11-a21-a31+a41) * (b15+b16+b17+b18-b55-b56-b57-b58);
P140 := (-a12+a22+a32-a42) * (b25+b26+b27+b28-b65-b66-b67-b68);
P141 := (a13+a24-a33-a44) * (b35+b37+b46+b48-b75-b77-b86-b88);
P142 := (a23+a24-a43-a44) * (b35+b37-b75-b77);
P143 := (a13-a33) * (b36+b38-b46-b48-b76-b78+b86+b88);
P144 := (a24-a44) * (-b35-b37+b45+b47+b75+b77-b85-b87);
P145 := (a13+a14-a33-a34) * (b46+b48-b86-b88);
P146 := (-a13+a23+a33-a43) * (b35+b36+b37+b38-b75-b76-b77-b78);
P147 := (a14-a24-a34+a44) * (b45+b46+b47+b48-b85-b86-b87-b88);
P148 := (a55+a66+a77+a88) * (-b11-b22-b33-b44+b51+b62+b73+b84);
P149 := (a65+a66+a87+a88) * (-b11-b33+b51+b73);
P150 := (a55+a77) * (-b12+b22-b34+b44+b52-b62+b74-b84);
P151 := (a66+a88) * (b11-b21+b33-b43-b51+b61-b73+b83);
P152 := (a55+a56+a77+a78) * (-b22-b44+b62+b84);
P153 := (-a55+a65-a77+a87) * (-b11-b12-b33-b34+b51+b52+b73+b74);
P154 := (a56-a66+a78-a88) * (-b21-b22-b43-b44+b61+b62+b83+b84);
P155 := (a75+a77+a86+a88) * (-b11-b22+b51+b62);
P156 := (a85+a86+a87+a88) * (-b11+b51);
P157 := (a75+a77) * (-b12+b22+b52-b62);
P158 := (a86+a88) * (b11-b21-b51+b61);
P159 := (a75+a76+a77+a78) * (-b22+b62);
P160 := (-a75-a77+a85+a87) * (-b11-b12+b51+b52);
P161 := (a76+a78-a86-a88) * (-b21-b22+b61+b62);
P162 := (a55+a66) * (-b13-b24+b33+b44+b53+b64-b73-b84);
P163 := (a65+a66) * (-b13+b33+b53-b73);
P164 := (a55) * (-b14+b24+b34-b44+b54-b64-b74+b84);
P165 := (a66) * (b13-b23-b33+b43-b53+b63+b73-b83);
P166 := (a55+a56) * (-b24+b44+b64-b84);
P167 := (-a55+a65) * (-b13-b14+b33+b34+b53+b54-b73-b74);
P168 := (a56-a66) * (-b23-b24+b43+b44+b63+b64-b83-b84);
P169 := (a77+a88) * (b11+b22-b31-b42-b51-b62+b71+b82);
P170 := (a87+a88) * (b11-b31-b51+b71);
P171 := (a77) * (b12-b22-b32+b42-b52+b62+b72-b82);
P172 := (a88) * (-b11+b21+b31-b41+b51-b61-b71+b81);
P173 := (a77+a78) * (b22-b42-b62+b82);
P174 := (-a77+a87) * (b11+b12-b31-b32-b51-b52+b71+b72);
P175 := (a78-a88) * (b21+b22-b41-b42-b61-b62+b81+b82);
P176 := (a55+a57+a66+a68) * (-b33-b44+b73+b84);
P177 := (a65+a66+a67+a68) * (-b33+b73);
P178 := (a55+a57) * (-b34+b44+b74-b84);
P179 := (a66+a68) * (b33-b43-b73+b83);
P180 := (a55+a56+a57+a58) * (-b44+b84);
P181 := (-a55-a57+a65+a67) * (-b33-b34+b73+b74);
P182 := (a56+a58-a66-a68) * (-b43-b44+b83+b84);
P183 := (-a55-a66+a75+a86) * (-b11-b13-b22-b24+b51+b53+b62+b64);
P184 := (-a65-a66+a85+a86) * (-b11-b13+b51+b53);
P185 := (-a55+a75) * (-b12-b14+b22+b24+b52+b54-b62-b64);
P186 := (-a66+a86) * (b11+b13-b21-b23-b51-b53+b61+b63);
P187 := (-a55-a56+a75+a76) * (-b22-b24+b62+b64);
P188 := (a55-a65-a75+a85) * (-b11-b12-b13-b14+b51+b52+b53+b54);
P189 := (-a56+a66+a76-a86) * (-b21-b22-b23-b24+b61+b62+b63+b64);
P190 := (a57+a68-a77-a88) * (-b31-b33-b42-b44+b71+b73+b82+b84);
P191 := (a67+a68-a87-a88) * (-b31-b33+b71+b73);
P192 := (a57-a77) * (-b32-b34+b42+b44+b72+b74-b82-b84);
P193 := (a68-a88) * (b31+b33-b41-b43-b71-b73+b81+b83);
P194 := (a57+a58-a77-a78) * (-b42-b44+b82+b84);
P195 := (-a57+a67+a77-a87) * (-b31-b32-b33-b34+b71+b72+b73+b74);
P196 := (a58-a68-a78+a88) * (-b41-b42-b43-b44+b81+b82+b83+b84);
P197 := (a11+a15+a22+a26+a33+a37+a44+a48) * (b55+b66+b77+b88);
P198 := (a21+a22+a25+a26+a43+a44+a47+a48) * (b55+b77);
P199 := (a11+a15+a33+a37) * (b56-b66+b78-b88);
P200 := (a22+a26+a44+a48) * (-b55+b65-b77+b87);
P201 := (a11+a12+a15+a16+a33+a34+a37+a38) * (b66+b88);
P202 := (-a11-a15+a21+a25-a33-a37+a43+a47) * (b55+b56+b77+b78);
P203 := (a12+a16-a22-a26+a34+a38-a44-a48) * (b65+b66+b87+b88);
P204 := (a31+a33+a35+a37+a42+a44+a46+a48) * (b55+b66);
P205 := (a41+a42+a43+a44+a45+a46+a47+a48) * (b55);
P206 := (a31+a33+a35+a37) * (b56-b66);
P207 := (a42+a44+a46+a48) * (-b55+b65);
P208 := (a31+a32+a33+a34+a35+a36+a37+a38) * (b66);
P209 := (-a31-a33-a35-a37+a41+a43+a45+a47) * (b55+b56);
P210 := (a32+a34+a36+a38-a42-a44-a46-a48) * (b65+b66);
P211 := (a11+a15+a22+a26) * (b57+b68-b77-b88);
P212 := (a21+a22+a25+a26) * (b57-b77);
P213 := (a11+a15) * (b58-b68-b78+b88);
P214 := (a22+a26) * (-b57+b67+b77-b87);
P215 := (a11+a12+a15+a16) * (b68-b88);
P216 := (-a11-a15+a21+a25) * (b57+b58-b77-b78);
P217 := (a12+a16-a22-a26) * (b67+b68-b87-b88);
P218 := (a33+a37+a44+a48) * (-b55-b66+b75+b86);
P219 := (a43+a44+a47+a48) * (-b55+b75);
P220 := (a33+a37) * (-b56+b66+b76-b86);
P221 := (a44+a48) * (b55-b65-b75+b85);
P222 := (a33+a34+a37+a38) * (-b66+b86);
P223 := (-a33-a37+a43+a47) * (-b55-b56+b75+b76);
P224 := (a34+a38-a44-a48) * (-b65-b66+b85+b86);
P225 := (a11+a13+a15+a17+a22+a24+a26+a28) * (b77+b88);
P226 := (a21+a22+a23+a24+a25+a26+a27+a28) * (b77);
P227 := (a11+a13+a15+a17) * (b78-b88);
P228 := (a22+a24+a26+a28) * (-b77+b87);
P229 := (a11+a12+a13+a14+a15+a16+a17+a18) * (b88);
P230 := (-a11-a13-a15-a17+a21+a23+a25+a27) * (b77+b78);
P231 := (a12+a14+a16+a18-a22-a24-a26-a28) * (b87+b88);
P232 := (-a11-a15-a22-a26+a31+a35+a42+a46) * (b55+b57+b66+b68);
P233 := (-a21-a22-a25-a26+a41+a42+a45+a46) * (b55+b57);
P234 := (-a11-a15+a31+a35) * (b56+b58-b66-b68);
P235 := (-a22-a26+a42+a46) * (-b55-b57+b65+b67);
P236 := (-a11-a12-a15-a16+a31+a32+a35+a36) * (b66+b68);
P237 := (a11+a15-a21-a25-a31-a35+a41+a45) * (b55+b56+b57+b58);
P238 := (-a12-a16+a22+a26+a32+a36-a42-a46) * (b65+b66+b67+b68);
P239 := (a13+a17+a24+a28-a33-a37-a44-a48) * (b75+b77+b86+b88);
P240 := (a23+a24+a27+a28-a43-a44-a47-a48) * (b75+b77);
P241 := (a13+a17-a33-a37) * (b76+b78-b86-b88);
P242 := (a24+a28-a44-a48) * (-b75-b77+b85+b87);
P243 := (a13+a14+a17+a18-a33-a34-a37-a38) * (b86+b88);
P244 := (-a13-a17+a23+a27+a33+a37-a43-a47) * (b75+b76+b77+b78);
P245 := (a14+a18-a24-a28-a34-a38+a44+a48) * (b85+b86+b87+b88);
P246 := (-a11-a22-a33-a44+a51+a62+a73+a84) * (b11+b15+b22+b26+b33+b37+b44+b48);
P247 := (-a21-a22-a43-a44+a61+a62+a83+a84) * (b11+b15+b33+b37);
P248 := (-a11-a33+a51+a73) * (b12+b16-b22-b26+b34+b38-b44-b48);
P249 := (-a22-a44+a62+a84) * (-b11-b15+b21+b25-b33-b37+b43+b47);
P250 := (-a11-a12-a33-a34+a51+a52+a73+a74) * (b22+b26+b44+b48);
P251 := (a11-a21+a33-a43-a51+a61-a73+a83) * (b11+b12+b15+b16+b33+b34+b37+b38);
P252 := (-a12+a22-a34+a44+a52-a62+a74-a84) * (b21+b22+b25+b26+b43+b44+b47+b48);
P253 := (-a31-a33-a42-a44+a71+a73+a82+a84) * (b11+b15+b22+b26);
P254 := (-a41-a42-a43-a44+a81+a82+a83+a84) * (b11+b15);
P255 := (-a31-a33+a71+a73) * (b12+b16-b22-b26);
P256 := (-a42-a44+a82+a84) * (-b11-b15+b21+b25);
P257 := (-a31-a32-a33-a34+a71+a72+a73+a74) * (b22+b26);
P258 := (a31+a33-a41-a43-a71-a73+a81+a83) * (b11+b12+b15+b16);
P259 := (-a32-a34+a42+a44+a72+a74-a82-a84) * (b21+b22+b25+b26);
P260 := (-a11-a22+a51+a62) * (b13+b17+b24+b28-b33-b37-b44-b48);
P261 := (-a21-a22+a61+a62) * (b13+b17-b33-b37);
P262 := (-a11+a51) * (b14+b18-b24-b28-b34-b38+b44+b48);
P263 := (-a22+a62) * (-b13-b17+b23+b27+b33+b37-b43-b47);
P264 := (-a11-a12+a51+a52) * (b24+b28-b44-b48);
P265 := (a11-a21-a51+a61) * (b13+b14+b17+b18-b33-b34-b37-b38);
P266 := (-a12+a22+a52-a62) * (b23+b24+b27+b28-b43-b44-b47-b48);
P267 := (-a33-a44+a73+a84) * (-b11-b15-b22-b26+b31+b35+b42+b46);
P268 := (-a43-a44+a83+a84) * (-b11-b15+b31+b35);
P269 := (-a33+a73) * (-b12-b16+b22+b26+b32+b36-b42-b46);
P270 := (-a44+a84) * (b11+b15-b21-b25-b31-b35+b41+b45);
P271 := (-a33-a34+a73+a74) * (-b22-b26+b42+b46);
P272 := (a33-a43-a73+a83) * (-b11-b12-b15-b16+b31+b32+b35+b36);
P273 := (-a34+a44+a74-a84) * (-b21-b22-b25-b26+b41+b42+b45+b46);
P274 := (-a11-a13-a22-a24+a51+a53+a62+a64) * (b33+b37+b44+b48);
P275 := (-a21-a22-a23-a24+a61+a62+a63+a64) * (b33+b37);
P276 := (-a11-a13+a51+a53) * (b34+b38-b44-b48);
P277 := (-a22-a24+a62+a64) * (-b33-b37+b43+b47);
P278 := (-a11-a12-a13-a14+a51+a52+a53+a54) * (b44+b48);
P279 := (a11+a13-a21-a23-a51-a53+a61+a63) * (b33+b34+b37+b38);
P280 := (-a12-a14+a22+a24+a52+a54-a62-a64) * (b43+b44+b47+b48);
P281 := (a11+a22-a31-a42-a51-a62+a71+a82) * (b11+b13+b15+b17+b22+b24+b26+b28);
P282 := (a21+a22-a41-a42-a61-a62+a81+a82) * (b11+b13+b15+b17);
P283 := (a11-a31-a51+a71) * (b12+b14+b16+b18-b22-b24-b26-b28);
P284 := (a22-a42-a62+a82) * (-b11-b13-b15-b17+b21+b23+b25+b27);
P285 := (a11+a12-a31-a32-a51-a52+a71+a72) * (b22+b24+b26+b28);
P286 := (-a11+a21+a31-a41+a51-a61-a71+a81) * (b11+b12+b13+b14+b15+b16+b17+b18);
P287 := (a12-a22-a32+a42-a52+a62+a72-a82) * (b21+b22+b23+b24+b25+b26+b27+b28);
P288 := (-a13-a24+a33+a44+a53+a64-a73-a84) * (b31+b33+b35+b37+b42+b44+b46+b48);
P289 := (-a23-a24+a43+a44+a63+a64-a83-a84) * (b31+b33+b35+b37);
P290 := (-a13+a33+a53-a73) * (b32+b34+b36+b38-b42-b44-b46-b48);
P291 := (-a24+a44+a64-a84) * (-b31-b33-b35-b37+b41+b43+b45+b47);
P292 := (-a13-a14+a33+a34+a53+a54-a73-a74) * (b42+b44+b46+b48);
P293 := (a13-a23-a33+a43-a53+a63+a73-a83) * (b31+b32+b33+b34+b35+b36+b37+b38);
P294 := (-a14+a24+a34-a44+a54-a64-a74+a84) * (b41+b42+b43+b44+b45+b46+b47+b48);
P295 := (a15+a26+a37+a48-a55-a66-a77-a88) * (b51+b55+b62+b66+b73+b77+b84+b88);
P296 := (a25+a26+a47+a48-a65-a66-a87-a88) * (b51+b55+b73+b77);
P297 := (a15+a37-a55-a77) * (b52+b56-b62-b66+b74+b78-b84-b88);
P298 := (a26+a48-a66-a88) * (-b51-b55+b61+b65-b73-b77+b83+b87);
P299 := (a15+a16+a37+a38-a55-a56-a77-a78) * (b62+b66+b84+b88);
P300 := (-a15+a25-a37+a47+a55-a65+a77-a87) * (b51+b52+b55+b56+b73+b74+b77+b78);
P301 := (a16-a26+a38-a48-a56+a66-a78+a88) * (b61+b62+b65+b66+b83+b84+b87+b88);
P302 := (a35+a37+a46+a48-a75-a77-a86-a88) * (b51+b55+b62+b66);
P303 := (a45+a46+a47+a48-a85-a86-a87-a88) * (b51+b55);
P304 := (a35+a37-a75-a77) * (b52+b56-b62-b66);
P305 := (a46+a48-a86-a88) * (-b51-b55+b61+b65);
P306 := (a35+a36+a37+a38-a75-a76-a77-a78) * (b62+b66);
P307 := (-a35-a37+a45+a47+a75+a77-a85-a87) * (b51+b52+b55+b56);
P308 := (a36+a38-a46-a48-a76-a78+a86+a88) * (b61+b62+b65+b66);
P309 := (a15+a26-a55-a66) * (b53+b57+b64+b68-b73-b77-b84-b88);
P310 := (a25+a26-a65-a66) * (b53+b57-b73-b77);
P311 := (a15-a55) * (b54+b58-b64-b68-b74-b78+b84+b88);
P312 := (a26-a66) * (-b53-b57+b63+b67+b73+b77-b83-b87);
P313 := (a15+a16-a55-a56) * (b64+b68-b84-b88);
P314 := (-a15+a25+a55-a65) * (b53+b54+b57+b58-b73-b74-b77-b78);
P315 := (a16-a26-a56+a66) * (b63+b64+b67+b68-b83-b84-b87-b88);
P316 := (a37+a48-a77-a88) * (-b51-b55-b62-b66+b71+b75+b82+b86);
P317 := (a47+a48-a87-a88) * (-b51-b55+b71+b75);
P318 := (a37-a77) * (-b52-b56+b62+b66+b72+b76-b82-b86);
P319 := (a48-a88) * (b51+b55-b61-b65-b71-b75+b81+b85);
P320 := (a37+a38-a77-a78) * (-b62-b66+b82+b86);
P321 := (-a37+a47+a77-a87) * (-b51-b52-b55-b56+b71+b72+b75+b76);
P322 := (a38-a48-a78+a88) * (-b61-b62-b65-b66+b81+b82+b85+b86);
P323 := (a15+a17+a26+a28-a55-a57-a66-a68) * (b73+b77+b84+b88);
P324 := (a25+a26+a27+a28-a65-a66-a67-a68) * (b73+b77);
P325 := (a15+a17-a55-a57) * (b74+b78-b84-b88);
P326 := (a26+a28-a66-a68) * (-b73-b77+b83+b87);
P327 := (a15+a16+a17+a18-a55-a56-a57-a58) * (b84+b88);
P328 := (-a15-a17+a25+a27+a55+a57-a65-a67) * (b73+b74+b77+b78);
P329 := (a16+a18-a26-a28-a56-a58+a66+a68) * (b83+b84+b87+b88);
P330 := (-a15-a26+a35+a46+a55+a66-a75-a86) * (b51+b53+b55+b57+b62+b64+b66+b68);
P331 := (-a25-a26+a45+a46+a65+a66-a85-a86) * (b51+b53+b55+b57);
P332 := (-a15+a35+a55-a75) * (b52+b54+b56+b58-b62-b64-b66-b68);
P333 := (-a26+a46+a66-a86) * (-b51-b53-b55-b57+b61+b63+b65+b67);
P334 := (-a15-a16+a35+a36+a55+a56-a75-a76) * (b62+b64+b66+b68);
P335 := (a15-a25-a35+a45-a55+a65+a75-a85) * (b51+b52+b53+b54+b55+b56+b57+b58);
P336 := (-a16+a26+a36-a46+a56-a66-a76+a86) * (b61+b62+b63+b64+b65+b66+b67+b68);
P337 := (a17+a28-a37-a48-a57-a68+a77+a88) * (b71+b73+b75+b77+b82+b84+b86+b88);
P338 := (a27+a28-a47-a48-a67-a68+a87+a88) * (b71+b73+b75+b77);
P339 := (a17-a37-a57+a77) * (b72+b74+b76+b78-b82-b84-b86-b88);
P340 := (a28-a48-a68+a88) * (-b71-b73-b75-b77+b81+b83+b85+b87);
P341 := (a17+a18-a37-a38-a57-a58+a77+a78) * (b82+b84+b86+b88);
P342 := (-a17+a27+a37-a47+a57-a67-a77+a87) * (b71+b72+b73+b74+b75+b76+b77+b78);
P343 := (a18-a28-a38+a48-a58+a68+a78-a88) * (b81+b82+b83+b84+b85+b86+b87+b88);

c11 := P01+P04-P05+P07+P22+P25-P26+P28-P29-P32+P33-P35+P43+P46-P47+P49+P148+P151-P152+P154+P169+P172-P173+P175-P176-P179+P180-P182+P190+P193-P194+P196-P197-P200+P201-P203-P218-P221+P222-P224+P225+P228-P229+P231-P239-P242+P243-P245+P295+P298-P299+P301+P316+P319-P320+P322-P323-P326+P327-P329+P337+P340-P341+P343;
c12 := P03+P05+P24+P26-P31-P33+P45+P47+P150+P152+P171+P173-P178-P180+P192+P194-P199-P201-P220-P222+P227+P229-P241-P243+P297+P299+P318+P320-P325-P327+P339+P341;
c13 := P15+P18-P19+P21+P29+P32-P33+P35+P162+P165-P166+P168+P176+P179-P180+P182-P211-P214+P215-P217-P225-P228+P229-P231+P309+P312-P313+P315+P323+P326-P327+P329;
c14 := P17+P19+P31+P33+P164+P166+P178+P180-P213-P215-P227-P229+P311+P313+P325+P327;
c15 := P99+P102-P103+P105+P120+P123-P124+P126-P127-P130+P131-P133+P141+P144-P145+P147+P197+P200-P201+P203+P218+P221-P222+P224-P225-P228+P229-P231+P239+P242-P243+P245;
c16 := P101+P103+P122+P124-P129-P131+P143+P145+P199+P201+P220+P222-P227-P229+P241+P243;
c17 := P113+P116-P117+P119+P127+P130-P131+P133+P211+P214-P215+P217+P225+P228-P229+P231;
c18 := P115+P117+P129+P131+P213+P215+P227+P229;
c21 := P02+P04+P23+P25-P30-P32+P44+P46+P149+P151+P170+P172-P177-P179+P191+P193-P198-P200-P219-P221+P226+P228-P240-P242+P296+P298+P317+P319-P324-P326+P338+P340;
c22 := P01-P02+P03+P06+P22-P23+P24+P27-P29+P30-P31-P34+P43-P44+P45+P48+P148-P149+P150+P153+P169-P170+P171+P174-P176+P177-P178-P181+P190-P191+P192+P195-P197+P198-P199-P202-P218+P219-P220-P223+P225-P226+P227+P230-P239+P240-P241-P244+P295-P296+P297+P300+P316-P317+P318+P321-P323+P324-P325-P328+P337-P338+P339+P342;
c23 := P16+P18+P30+P32+P163+P165+P177+P179-P212-P214-P226-P228+P310+P312+P324+P326;
c24 := P15-P16+P17+P20+P29-P30+P31+P34+P162-P163+P164+P167+P176-P177+P178+P181-P211+P212-P213-P216-P225+P226-P227-P230+P309-P310+P311+P314+P323-P324+P325+P328;
c25 := P100+P102+P121+P123-P128-P130+P142+P144+P198+P200+P219+P221-P226-P228+P240+P242;
c26 := P99-P100+P101+P104+P120-P121+P122+P125-P127+P128-P129-P132+P141-P142+P143+P146+P197-P198+P199+P202+P218-P219+P220+P223-P225+P226-P227-P230+P239-P240+P241+P244;
c27 := P114+P116+P128+P130+P212+P214+P226+P228;
c28 := P113-P114+P115+P118+P127-P128+P129+P132+P211-P212+P213+P216+P225-P226+P227+P230;
c31 := P08+P11-P12+P14+P22+P25-P26+P28+P155+P158-P159+P161+P169+P172-P173+P175-P204-P207+P208-P210-P218-P221+P222-P224+P302+P305-P306+P308+P316+P319-P320+P322;
c32 := P10+P12+P24+P26+P157+P159+P171+P173-P206-P208-P220-P222+P304+P306+P318+P320;
c33 := P01+P04-P05+P07-P08-P11+P12-P14+P15+P18-P19+P21+P36+P39-P40+P42+P148+P151-P152+P154-P155-P158+P159-P161+P162+P165-P166+P168+P183+P186-P187+P189-P197-P200+P201-P203+P204+P207-P208+P210-P211-P214+P215-P217-P232-P235+P236-P238+P295+P298-P299+P301-P302-P305+P306-P308+P309+P312-P313+P315+P330+P333-P334+P336;
c34 := P03+P05-P10-P12+P17+P19+P38+P40+P150+P152-P157-P159+P164+P166+P185+P187-P199-P201+P206+P208-P213-P215-P234-P236+P297+P299-P304-P306+P311+P313+P332+P334;
c35 := P106+P109-P110+P112+P120+P123-P124+P126+P204+P207-P208+P210+P218+P221-P222+P224;
c36 := P108+P110+P122+P124+P206+P208+P220+P222;
c37 := P99+P102-P103+P105-P106-P109+P110-P112+P113+P116-P117+P119+P134+P137-P138+P140+P197+P200-P201+P203-P204-P207+P208-P210+P211+P214-P215+P217+P232+P235-P236+P238;
c38 := P101+P103-P108-P110+P115+P117+P136+P138+P199+P201-P206-P208+P213+P215+P234+P236;
c41 := P09+P11+P23+P25+P156+P158+P170+P172-P205-P207-P219-P221+P303+P305+P317+P319;
c42 := P08-P09+P10+P13+P22-P23+P24+P27+P155-P156+P157+P160+P169-P170+P171+P174-P204+P205-P206-P209-P218+P219-P220-P223+P302-P303+P304+P307+P316-P317+P318+P321;
c43 := P02+P04-P09-P11+P16+P18+P37+P39+P149+P151-P156-P158+P163+P165+P184+P186-P198-P200+P205+P207-P212-P214-P233-P235+P296+P298-P303-P305+P310+P312+P331+P333;
c44 := P01-P02+P03+P06-P08+P09-P10-P13+P15-P16+P17+P20+P36-P37+P38+P41+P148-P149+P150+P153-P155+P156-P157-P160+P162-P163+P164+P167+P183-P184+P185+P188-P197+P198-P199-P202+P204-P205+P206+P209-P211+P212-P213-P216-P232+P233-P234-P237+P295-P296+P297+P300-P302+P303-P304-P307+P309-P310+P311+P314+P330-P331+P332+P335;
c45 := P107+P109+P121+P123+P205+P207+P219+P221;
c46 := P106-P107+P108+P111+P120-P121+P122+P125+P204-P205+P206+P209+P218-P219+P220+P223;
c47 := P100+P102-P107-P109+P114+P116+P135+P137+P198+P200-P205-P207+P212+P214+P233+P235;
c48 := P99-P100+P101+P104-P106+P107-P108-P111+P113-P114+P115+P118+P134-P135+P136+P139+P197-P198+P199+P202-P204+P205-P206-P209+P211-P212+P213+P216+P232-P233+P234+P237;
c51 := P50+P53-P54+P56+P71+P74-P75+P77-P78-P81+P82-P84+P92+P95-P96+P98+P148+P151-P152+P154+P169+P172-P173+P175-P176-P179+P180-P182+P190+P193-P194+P196;
c52 := P52+P54+P73+P75-P80-P82+P94+P96+P150+P152+P171+P173-P178-P180+P192+P194;
c53 := P64+P67-P68+P70+P78+P81-P82+P84+P162+P165-P166+P168+P176+P179-P180+P182;
c54 := P66+P68+P80+P82+P164+P166+P178+P180;
c55 := P01+P04-P05+P07+P22+P25-P26+P28-P29-P32+P33-P35+P43+P46-P47+P49-P50-P53+P54-P56-P71-P74+P75-P77+P78+P81-P82+P84-P92-P95+P96-P98+P99+P102-P103+P105+P120+P123-P124+P126-P127-P130+P131-P133+P141+P144-P145+P147+P246+P249-P250+P252+P267+P270-P271+P273-P274-P277+P278-P280+P288+P291-P292+P294;
c56 := P03+P05+P24+P26-P31-P33+P45+P47-P52-P54-P73-P75+P80+P82-P94-P96+P101+P103+P122+P124-P129-P131+P143+P145+P248+P250+P269+P271-P276-P278+P290+P292;
c57 := P15+P18-P19+P21+P29+P32-P33+P35-P64-P67+P68-P70-P78-P81+P82-P84+P113+P116-P117+P119+P127+P130-P131+P133+P260+P263-P264+P266+P274+P277-P278+P280;
c58 := P17+P19+P31+P33-P66-P68-P80-P82+P115+P117+P129+P131+P262+P264+P276+P278;
c61 := P51+P53+P72+P74-P79-P81+P93+P95+P149+P151+P170+P172-P177-P179+P191+P193;
c62 := P50-P51+P52+P55+P71-P72+P73+P76-P78+P79-P80-P83+P92-P93+P94+P97+P148-P149+P150+P153+P169-P170+P171+P174-P176+P177-P178-P181+P190-P191+P192+P195;
c63 := P65+P67+P79+P81+P163+P165+P177+P179;
c64 := P64-P65+P66+P69+P78-P79+P80+P83+P162-P163+P164+P167+P176-P177+P178+P181;
c65 := P02+P04+P23+P25-P30-P32+P44+P46-P51-P53-P72-P74+P79+P81-P93-P95+P100+P102+P121+P123-P128-P130+P142+P144+P247+P249+P268+P270-P275-P277+P289+P291;
c66 := P01-P02+P03+P06+P22-P23+P24+P27-P29+P30-P31-P34+P43-P44+P45+P48-P50+P51-P52-P55-P71+P72-P73-P76+P78-P79+P80+P83-P92+P93-P94-P97+P99-P100+P101+P104+P120-P121+P122+P125-P127+P128-P129-P132+P141-P142+P143+P146+P246-P247+P248+P251+P267-P268+P269+P272-P274+P275-P276-P279+P288-P289+P290+P293;
c67 := P16+P18+P30+P32-P65-P67-P79-P81+P114+P116+P128+P130+P261+P263+P275+P277;
c68 := P15-P16+P17+P20+P29-P30+P31+P34-P64+P65-P66-P69-P78+P79-P80-P83+P113-P114+P115+P118+P127-P128+P129+P132+P260-P261+P262+P265+P274-P275+P276+P279;
c71 := P57+P60-P61+P63+P71+P74-P75+P77+P155+P158-P159+P161+P169+P172-P173+P175;
c72 := P59+P61+P73+P75+P157+P159+P171+P173;
c73 := P50+P53-P54+P56-P57-P60+P61-P63+P64+P67-P68+P70+P85+P88-P89+P91+P148+P151-P152+P154-P155-P158+P159-P161+P162+P165-P166+P168+P183+P186-P187+P189;
c74 := P52+P54-P59-P61+P66+P68+P87+P89+P150+P152-P157-P159+P164+P166+P185+P187;
c75 := P08+P11-P12+P14+P22+P25-P26+P28-P57-P60+P61-P63-P71-P74+P75-P77+P106+P109-P110+P112+P120+P123-P124+P126+P253+P256-P257+P259+P267+P270-P271+P273;
c76 := P10+P12+P24+P26-P59-P61-P73-P75+P108+P110+P122+P124+P255+P257+P269+P271;
c77 := P01+P04-P05+P07-P08-P11+P12-P14+P15+P18-P19+P21+P36+P39-P40+P42-P50-P53+P54-P56+P57+P60-P61+P63-P64-P67+P68-P70-P85-P88+P89-P91+P99+P102-P103+P105-P106-P109+P110-P112+P113+P116-P117+P119+P134+P137-P138+P140+P246+P249-P250+P252-P253-P256+P257-P259+P260+P263-P264+P266+P281+P284-P285+P287;
c78 := P03+P05-P10-P12+P17+P19+P38+P40-P52-P54+P59+P61-P66-P68-P87-P89+P101+P103-P108-P110+P115+P117+P136+P138+P248+P250-P255-P257+P262+P264+P283+P285;
c81 := P58+P60+P72+P74+P156+P158+P170+P172;
c82 := P57-P58+P59+P62+P71-P72+P73+P76+P155-P156+P157+P160+P169-P170+P171+P174;
c83 := P51+P53-P58-P60+P65+P67+P86+P88+P149+P151-P156-P158+P163+P165+P184+P186;
c84 := P50-P51+P52+P55-P57+P58-P59-P62+P64-P65+P66+P69+P85-P86+P87+P90+P148-P149+P150+P153-P155+P156-P157-P160+P162-P163+P164+P167+P183-P184+P185+P188;
c85 := P09+P11+P23+P25-P58-P60-P72-P74+P107+P109+P121+P123+P254+P256+P268+P270;
c86 := P08-P09+P10+P13+P22-P23+P24+P27-P57+P58-P59-P62-P71+P72-P73-P76+P106-P107+P108+P111+P120-P121+P122+P125+P253-P254+P255+P258+P267-P268+P269+P272;
c87 := P02+P04-P09-P11+P16+P18+P37+P39-P51-P53+P58+P60-P65-P67-P86-P88+P100+P102-P107-P109+P114+P116+P135+P137+P247+P249-P254-P256+P261+P263+P282+P284;
c88 := P01-P02+P03+P06-P08+P09-P10-P13+P15-P16+P17+P20+P36-P37+P38+P41-P50+P51-P52-P55+P57-P58+P59+P62-P64+P65-P66-P69-P85+P86-P87-P90+P99-P100+P101+P104-P106+P107-P108-P111+P113-P114+P115+P118+P134-P135+P136+P139+P246-P247+P248+P251-P253+P254-P255-P258+P260-P261+P262+P265+P281-P282+P283+P286;