From 994e9dc912407f6b685215a27f8a348d9170bb60 Mon Sep 17 00:00:00 2001 From: Ahmet Inan Date: Mon, 1 Jun 2020 12:02:36 +0200 Subject: [PATCH] added unrolled decoders for K = 2, 3, 4, 5 and 6 --- simplex_decoder.hh | 318 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 318 insertions(+) diff --git a/simplex_decoder.hh b/simplex_decoder.hh index 34ccc66..ae58073 100644 --- a/simplex_decoder.hh +++ b/simplex_decoder.hh @@ -52,5 +52,323 @@ public: } }; +template <> +class SimplexDecoder<2> +{ + static const int K = 2; + static const int W = 1 << K; +public: + int operator()(const int8_t *code) + { + int sum[W] = { + + code[0] + code[1] + code[2], + - code[0] + code[1] - code[2], + + code[0] - code[1] - code[2], + - code[0] - code[1] + code[2], + }; + int word = 0, best = 0, next = 0; + for (int msg = 0 ; msg < W; ++msg) { + if (sum[msg] > best) { + next = best; + best = sum[msg]; + word = msg; + } else if (sum[msg] > next) { + next = sum[msg]; + } + } + if (best == next) + return -1; + return word; + } +}; + +template <> +class SimplexDecoder<3> +{ + static const int K = 3; + static const int W = 1 << K; +public: + int operator()(const int8_t *code) + { + int sum[W] = { + + code[0] + code[1] + code[2] + code[3] + code[4] + code[5] + code[6], + - code[0] + code[1] - code[2] + code[3] - code[4] + code[5] - code[6], + + code[0] - code[1] - code[2] + code[3] + code[4] - code[5] - code[6], + - code[0] - code[1] + code[2] + code[3] - code[4] - code[5] + code[6], + + code[0] + code[1] + code[2] - code[3] - code[4] - code[5] - code[6], + - code[0] + code[1] - code[2] - code[3] + code[4] - code[5] + code[6], + + code[0] - code[1] - code[2] - code[3] - code[4] + code[5] + code[6], + - code[0] - code[1] + code[2] - code[3] + code[4] + code[5] - code[6], + }; + int word = 0, best = 0, next = 0; + for (int msg = 0 ; msg < W; ++msg) { + if (sum[msg] > best) { + next = best; + best = sum[msg]; + word = msg; + } else if (sum[msg] > next) { + next = sum[msg]; + } + } + if (best == next) + return -1; + return word; + } +}; + +template <> +class SimplexDecoder<4> +{ + static const int K = 4; + static const int W = 1 << K; +public: + int operator()(const int8_t *c) + { + int sum[W] = { + + c[0] + c[1] + c[2] + c[3] + c[4] + c[5] + c[6] + c[7] + c[8] + c[9] + c[10] + c[11] + c[12] + c[13] + c[14], + - c[0] + c[1] - c[2] + c[3] - c[4] + c[5] - c[6] + c[7] - c[8] + c[9] - c[10] + c[11] - c[12] + c[13] - c[14], + + c[0] - c[1] - c[2] + c[3] + c[4] - c[5] - c[6] + c[7] + c[8] - c[9] - c[10] + c[11] + c[12] - c[13] - c[14], + - c[0] - c[1] + c[2] + c[3] - c[4] - c[5] + c[6] + c[7] - c[8] - c[9] + c[10] + c[11] - c[12] - c[13] + c[14], + + c[0] + c[1] + c[2] - c[3] - c[4] - c[5] - c[6] + c[7] + c[8] + c[9] + c[10] - c[11] - c[12] - c[13] - c[14], + - c[0] + c[1] - c[2] - c[3] + c[4] - c[5] + c[6] + c[7] - c[8] + c[9] - c[10] - c[11] + c[12] - c[13] + c[14], + + c[0] - c[1] - c[2] - c[3] - c[4] + c[5] + c[6] + c[7] + c[8] - c[9] - c[10] - c[11] - c[12] + c[13] + c[14], + - c[0] - c[1] + c[2] - c[3] + c[4] + c[5] - c[6] + c[7] - c[8] - c[9] + c[10] - c[11] + c[12] + c[13] - c[14], + + c[0] + c[1] + c[2] + c[3] + c[4] + c[5] + c[6] - c[7] - c[8] - c[9] - c[10] - c[11] - c[12] - c[13] - c[14], + - c[0] + c[1] - c[2] + c[3] - c[4] + c[5] - c[6] - c[7] + c[8] - c[9] + c[10] - c[11] + c[12] - c[13] + c[14], + + c[0] - c[1] - c[2] + c[3] + c[4] - c[5] - c[6] - c[7] - c[8] + c[9] + c[10] - c[11] - c[12] + c[13] + c[14], + - c[0] - c[1] + c[2] + c[3] - c[4] - c[5] + c[6] - c[7] + c[8] + c[9] - c[10] - c[11] + c[12] + c[13] - c[14], + + c[0] + c[1] + c[2] - c[3] - c[4] - c[5] - c[6] - c[7] - c[8] - c[9] - c[10] + c[11] + c[12] + c[13] + c[14], + - c[0] + c[1] - c[2] - c[3] + c[4] - c[5] + c[6] - c[7] + c[8] - c[9] + c[10] + c[11] - c[12] + c[13] - c[14], + + c[0] - c[1] - c[2] - c[3] - c[4] + c[5] + c[6] - c[7] - c[8] + c[9] + c[10] + c[11] + c[12] - c[13] - c[14], + - c[0] - c[1] + c[2] - c[3] + c[4] + c[5] - c[6] - c[7] + c[8] + c[9] - c[10] + c[11] - c[12] - c[13] + c[14], + }; + int word = 0, best = 0, next = 0; + for (int msg = 0 ; msg < W; ++msg) { + if (sum[msg] > best) { + next = best; + best = sum[msg]; + word = msg; + } else if (sum[msg] > next) { + next = sum[msg]; + } + } + if (best == next) + return -1; + return word; + } +}; + +template <> +class SimplexDecoder<5> +{ + static const int K = 5; + static const int W = 1 << K; +public: + int operator()(const int8_t *c) + { + int sum[W] = { ++c[0]+c[1]+c[2]+c[3]+c[4]+c[5]+c[6]+c[7]+c[8]+c[9]+c[10]+c[11]+c[12]+c[13]+c[14]+c[15]+c[16]+c[17]+c[18]+c[19]+c[20]+c[21]+c[22]+c[23]+c[24]+c[25]+c[26]+c[27]+c[28]+c[29]+c[30], +-c[0]+c[1]-c[2]+c[3]-c[4]+c[5]-c[6]+c[7]-c[8]+c[9]-c[10]+c[11]-c[12]+c[13]-c[14]+c[15]-c[16]+c[17]-c[18]+c[19]-c[20]+c[21]-c[22]+c[23]-c[24]+c[25]-c[26]+c[27]-c[28]+c[29]-c[30], ++c[0]-c[1]-c[2]+c[3]+c[4]-c[5]-c[6]+c[7]+c[8]-c[9]-c[10]+c[11]+c[12]-c[13]-c[14]+c[15]+c[16]-c[17]-c[18]+c[19]+c[20]-c[21]-c[22]+c[23]+c[24]-c[25]-c[26]+c[27]+c[28]-c[29]-c[30], +-c[0]-c[1]+c[2]+c[3]-c[4]-c[5]+c[6]+c[7]-c[8]-c[9]+c[10]+c[11]-c[12]-c[13]+c[14]+c[15]-c[16]-c[17]+c[18]+c[19]-c[20]-c[21]+c[22]+c[23]-c[24]-c[25]+c[26]+c[27]-c[28]-c[29]+c[30], ++c[0]+c[1]+c[2]-c[3]-c[4]-c[5]-c[6]+c[7]+c[8]+c[9]+c[10]-c[11]-c[12]-c[13]-c[14]+c[15]+c[16]+c[17]+c[18]-c[19]-c[20]-c[21]-c[22]+c[23]+c[24]+c[25]+c[26]-c[27]-c[28]-c[29]-c[30], +-c[0]+c[1]-c[2]-c[3]+c[4]-c[5]+c[6]+c[7]-c[8]+c[9]-c[10]-c[11]+c[12]-c[13]+c[14]+c[15]-c[16]+c[17]-c[18]-c[19]+c[20]-c[21]+c[22]+c[23]-c[24]+c[25]-c[26]-c[27]+c[28]-c[29]+c[30], ++c[0]-c[1]-c[2]-c[3]-c[4]+c[5]+c[6]+c[7]+c[8]-c[9]-c[10]-c[11]-c[12]+c[13]+c[14]+c[15]+c[16]-c[17]-c[18]-c[19]-c[20]+c[21]+c[22]+c[23]+c[24]-c[25]-c[26]-c[27]-c[28]+c[29]+c[30], +-c[0]-c[1]+c[2]-c[3]+c[4]+c[5]-c[6]+c[7]-c[8]-c[9]+c[10]-c[11]+c[12]+c[13]-c[14]+c[15]-c[16]-c[17]+c[18]-c[19]+c[20]+c[21]-c[22]+c[23]-c[24]-c[25]+c[26]-c[27]+c[28]+c[29]-c[30], ++c[0]+c[1]+c[2]+c[3]+c[4]+c[5]+c[6]-c[7]-c[8]-c[9]-c[10]-c[11]-c[12]-c[13]-c[14]+c[15]+c[16]+c[17]+c[18]+c[19]+c[20]+c[21]+c[22]-c[23]-c[24]-c[25]-c[26]-c[27]-c[28]-c[29]-c[30], +-c[0]+c[1]-c[2]+c[3]-c[4]+c[5]-c[6]-c[7]+c[8]-c[9]+c[10]-c[11]+c[12]-c[13]+c[14]+c[15]-c[16]+c[17]-c[18]+c[19]-c[20]+c[21]-c[22]-c[23]+c[24]-c[25]+c[26]-c[27]+c[28]-c[29]+c[30], ++c[0]-c[1]-c[2]+c[3]+c[4]-c[5]-c[6]-c[7]-c[8]+c[9]+c[10]-c[11]-c[12]+c[13]+c[14]+c[15]+c[16]-c[17]-c[18]+c[19]+c[20]-c[21]-c[22]-c[23]-c[24]+c[25]+c[26]-c[27]-c[28]+c[29]+c[30], +-c[0]-c[1]+c[2]+c[3]-c[4]-c[5]+c[6]-c[7]+c[8]+c[9]-c[10]-c[11]+c[12]+c[13]-c[14]+c[15]-c[16]-c[17]+c[18]+c[19]-c[20]-c[21]+c[22]-c[23]+c[24]+c[25]-c[26]-c[27]+c[28]+c[29]-c[30], ++c[0]+c[1]+c[2]-c[3]-c[4]-c[5]-c[6]-c[7]-c[8]-c[9]-c[10]+c[11]+c[12]+c[13]+c[14]+c[15]+c[16]+c[17]+c[18]-c[19]-c[20]-c[21]-c[22]-c[23]-c[24]-c[25]-c[26]+c[27]+c[28]+c[29]+c[30], +-c[0]+c[1]-c[2]-c[3]+c[4]-c[5]+c[6]-c[7]+c[8]-c[9]+c[10]+c[11]-c[12]+c[13]-c[14]+c[15]-c[16]+c[17]-c[18]-c[19]+c[20]-c[21]+c[22]-c[23]+c[24]-c[25]+c[26]+c[27]-c[28]+c[29]-c[30], ++c[0]-c[1]-c[2]-c[3]-c[4]+c[5]+c[6]-c[7]-c[8]+c[9]+c[10]+c[11]+c[12]-c[13]-c[14]+c[15]+c[16]-c[17]-c[18]-c[19]-c[20]+c[21]+c[22]-c[23]-c[24]+c[25]+c[26]+c[27]+c[28]-c[29]-c[30], +-c[0]-c[1]+c[2]-c[3]+c[4]+c[5]-c[6]-c[7]+c[8]+c[9]-c[10]+c[11]-c[12]-c[13]+c[14]+c[15]-c[16]-c[17]+c[18]-c[19]+c[20]+c[21]-c[22]-c[23]+c[24]+c[25]-c[26]+c[27]-c[28]-c[29]+c[30], ++c[0]+c[1]+c[2]+c[3]+c[4]+c[5]+c[6]+c[7]+c[8]+c[9]+c[10]+c[11]+c[12]+c[13]+c[14]-c[15]-c[16]-c[17]-c[18]-c[19]-c[20]-c[21]-c[22]-c[23]-c[24]-c[25]-c[26]-c[27]-c[28]-c[29]-c[30], +-c[0]+c[1]-c[2]+c[3]-c[4]+c[5]-c[6]+c[7]-c[8]+c[9]-c[10]+c[11]-c[12]+c[13]-c[14]-c[15]+c[16]-c[17]+c[18]-c[19]+c[20]-c[21]+c[22]-c[23]+c[24]-c[25]+c[26]-c[27]+c[28]-c[29]+c[30], ++c[0]-c[1]-c[2]+c[3]+c[4]-c[5]-c[6]+c[7]+c[8]-c[9]-c[10]+c[11]+c[12]-c[13]-c[14]-c[15]-c[16]+c[17]+c[18]-c[19]-c[20]+c[21]+c[22]-c[23]-c[24]+c[25]+c[26]-c[27]-c[28]+c[29]+c[30], +-c[0]-c[1]+c[2]+c[3]-c[4]-c[5]+c[6]+c[7]-c[8]-c[9]+c[10]+c[11]-c[12]-c[13]+c[14]-c[15]+c[16]+c[17]-c[18]-c[19]+c[20]+c[21]-c[22]-c[23]+c[24]+c[25]-c[26]-c[27]+c[28]+c[29]-c[30], ++c[0]+c[1]+c[2]-c[3]-c[4]-c[5]-c[6]+c[7]+c[8]+c[9]+c[10]-c[11]-c[12]-c[13]-c[14]-c[15]-c[16]-c[17]-c[18]+c[19]+c[20]+c[21]+c[22]-c[23]-c[24]-c[25]-c[26]+c[27]+c[28]+c[29]+c[30], +-c[0]+c[1]-c[2]-c[3]+c[4]-c[5]+c[6]+c[7]-c[8]+c[9]-c[10]-c[11]+c[12]-c[13]+c[14]-c[15]+c[16]-c[17]+c[18]+c[19]-c[20]+c[21]-c[22]-c[23]+c[24]-c[25]+c[26]+c[27]-c[28]+c[29]-c[30], ++c[0]-c[1]-c[2]-c[3]-c[4]+c[5]+c[6]+c[7]+c[8]-c[9]-c[10]-c[11]-c[12]+c[13]+c[14]-c[15]-c[16]+c[17]+c[18]+c[19]+c[20]-c[21]-c[22]-c[23]-c[24]+c[25]+c[26]+c[27]+c[28]-c[29]-c[30], +-c[0]-c[1]+c[2]-c[3]+c[4]+c[5]-c[6]+c[7]-c[8]-c[9]+c[10]-c[11]+c[12]+c[13]-c[14]-c[15]+c[16]+c[17]-c[18]+c[19]-c[20]-c[21]+c[22]-c[23]+c[24]+c[25]-c[26]+c[27]-c[28]-c[29]+c[30], ++c[0]+c[1]+c[2]+c[3]+c[4]+c[5]+c[6]-c[7]-c[8]-c[9]-c[10]-c[11]-c[12]-c[13]-c[14]-c[15]-c[16]-c[17]-c[18]-c[19]-c[20]-c[21]-c[22]+c[23]+c[24]+c[25]+c[26]+c[27]+c[28]+c[29]+c[30], +-c[0]+c[1]-c[2]+c[3]-c[4]+c[5]-c[6]-c[7]+c[8]-c[9]+c[10]-c[11]+c[12]-c[13]+c[14]-c[15]+c[16]-c[17]+c[18]-c[19]+c[20]-c[21]+c[22]+c[23]-c[24]+c[25]-c[26]+c[27]-c[28]+c[29]-c[30], ++c[0]-c[1]-c[2]+c[3]+c[4]-c[5]-c[6]-c[7]-c[8]+c[9]+c[10]-c[11]-c[12]+c[13]+c[14]-c[15]-c[16]+c[17]+c[18]-c[19]-c[20]+c[21]+c[22]+c[23]+c[24]-c[25]-c[26]+c[27]+c[28]-c[29]-c[30], +-c[0]-c[1]+c[2]+c[3]-c[4]-c[5]+c[6]-c[7]+c[8]+c[9]-c[10]-c[11]+c[12]+c[13]-c[14]-c[15]+c[16]+c[17]-c[18]-c[19]+c[20]+c[21]-c[22]+c[23]-c[24]-c[25]+c[26]+c[27]-c[28]-c[29]+c[30], ++c[0]+c[1]+c[2]-c[3]-c[4]-c[5]-c[6]-c[7]-c[8]-c[9]-c[10]+c[11]+c[12]+c[13]+c[14]-c[15]-c[16]-c[17]-c[18]+c[19]+c[20]+c[21]+c[22]+c[23]+c[24]+c[25]+c[26]-c[27]-c[28]-c[29]-c[30], +-c[0]+c[1]-c[2]-c[3]+c[4]-c[5]+c[6]-c[7]+c[8]-c[9]+c[10]+c[11]-c[12]+c[13]-c[14]-c[15]+c[16]-c[17]+c[18]+c[19]-c[20]+c[21]-c[22]+c[23]-c[24]+c[25]-c[26]-c[27]+c[28]-c[29]+c[30], ++c[0]-c[1]-c[2]-c[3]-c[4]+c[5]+c[6]-c[7]-c[8]+c[9]+c[10]+c[11]+c[12]-c[13]-c[14]-c[15]-c[16]+c[17]+c[18]+c[19]+c[20]-c[21]-c[22]+c[23]+c[24]-c[25]-c[26]-c[27]-c[28]+c[29]+c[30], +-c[0]-c[1]+c[2]-c[3]+c[4]+c[5]-c[6]-c[7]+c[8]+c[9]-c[10]+c[11]-c[12]-c[13]+c[14]-c[15]+c[16]+c[17]-c[18]+c[19]-c[20]-c[21]+c[22]+c[23]-c[24]-c[25]+c[26]-c[27]+c[28]+c[29]-c[30], + }; + int word = 0, best = 0, next = 0; + for (int msg = 0 ; msg < W; ++msg) { + if (sum[msg] > best) { + next = best; + best = sum[msg]; + word = msg; + } else if (sum[msg] > next) { + next = sum[msg]; + } + } + if (best == next) + return -1; + return word; + } +}; + +template <> +class SimplexDecoder<6> +{ + static const int K = 6; + static const int W = 1 << K; +public: + int operator()(const int8_t *c) + { + int sum[W] = { ++c[0]+c[1]+c[2]+c[3]+c[4]+c[5]+c[6]+c[7]+c[8]+c[9]+c[10]+c[11]+c[12]+c[13]+c[14]+c[15]+c[16]+c[17]+c[18]+c[19]+c[20]+c[21]+c[22]+c[23]+c[24]+c[25]+c[26]+c[27]+c[28]+c[29]+c[30]+c[31]+c[32] + +c[33]+c[34]+c[35]+c[36]+c[37]+c[38]+c[39]+c[40]+c[41]+c[42]+c[43]+c[44]+c[45]+c[46]+c[47]+c[48]+c[49]+c[50]+c[51]+c[52]+c[53]+c[54]+c[55]+c[56]+c[57]+c[58]+c[59]+c[60]+c[61]+c[62], +-c[0]+c[1]-c[2]+c[3]-c[4]+c[5]-c[6]+c[7]-c[8]+c[9]-c[10]+c[11]-c[12]+c[13]-c[14]+c[15]-c[16]+c[17]-c[18]+c[19]-c[20]+c[21]-c[22]+c[23]-c[24]+c[25]-c[26]+c[27]-c[28]+c[29]-c[30]+c[31]-c[32] + +c[33]-c[34]+c[35]-c[36]+c[37]-c[38]+c[39]-c[40]+c[41]-c[42]+c[43]-c[44]+c[45]-c[46]+c[47]-c[48]+c[49]-c[50]+c[51]-c[52]+c[53]-c[54]+c[55]-c[56]+c[57]-c[58]+c[59]-c[60]+c[61]-c[62], ++c[0]-c[1]-c[2]+c[3]+c[4]-c[5]-c[6]+c[7]+c[8]-c[9]-c[10]+c[11]+c[12]-c[13]-c[14]+c[15]+c[16]-c[17]-c[18]+c[19]+c[20]-c[21]-c[22]+c[23]+c[24]-c[25]-c[26]+c[27]+c[28]-c[29]-c[30]+c[31]+c[32] + -c[33]-c[34]+c[35]+c[36]-c[37]-c[38]+c[39]+c[40]-c[41]-c[42]+c[43]+c[44]-c[45]-c[46]+c[47]+c[48]-c[49]-c[50]+c[51]+c[52]-c[53]-c[54]+c[55]+c[56]-c[57]-c[58]+c[59]+c[60]-c[61]-c[62], +-c[0]-c[1]+c[2]+c[3]-c[4]-c[5]+c[6]+c[7]-c[8]-c[9]+c[10]+c[11]-c[12]-c[13]+c[14]+c[15]-c[16]-c[17]+c[18]+c[19]-c[20]-c[21]+c[22]+c[23]-c[24]-c[25]+c[26]+c[27]-c[28]-c[29]+c[30]+c[31]-c[32] + -c[33]+c[34]+c[35]-c[36]-c[37]+c[38]+c[39]-c[40]-c[41]+c[42]+c[43]-c[44]-c[45]+c[46]+c[47]-c[48]-c[49]+c[50]+c[51]-c[52]-c[53]+c[54]+c[55]-c[56]-c[57]+c[58]+c[59]-c[60]-c[61]+c[62], ++c[0]+c[1]+c[2]-c[3]-c[4]-c[5]-c[6]+c[7]+c[8]+c[9]+c[10]-c[11]-c[12]-c[13]-c[14]+c[15]+c[16]+c[17]+c[18]-c[19]-c[20]-c[21]-c[22]+c[23]+c[24]+c[25]+c[26]-c[27]-c[28]-c[29]-c[30]+c[31]+c[32] + +c[33]+c[34]-c[35]-c[36]-c[37]-c[38]+c[39]+c[40]+c[41]+c[42]-c[43]-c[44]-c[45]-c[46]+c[47]+c[48]+c[49]+c[50]-c[51]-c[52]-c[53]-c[54]+c[55]+c[56]+c[57]+c[58]-c[59]-c[60]-c[61]-c[62], +-c[0]+c[1]-c[2]-c[3]+c[4]-c[5]+c[6]+c[7]-c[8]+c[9]-c[10]-c[11]+c[12]-c[13]+c[14]+c[15]-c[16]+c[17]-c[18]-c[19]+c[20]-c[21]+c[22]+c[23]-c[24]+c[25]-c[26]-c[27]+c[28]-c[29]+c[30]+c[31]-c[32] + +c[33]-c[34]-c[35]+c[36]-c[37]+c[38]+c[39]-c[40]+c[41]-c[42]-c[43]+c[44]-c[45]+c[46]+c[47]-c[48]+c[49]-c[50]-c[51]+c[52]-c[53]+c[54]+c[55]-c[56]+c[57]-c[58]-c[59]+c[60]-c[61]+c[62], ++c[0]-c[1]-c[2]-c[3]-c[4]+c[5]+c[6]+c[7]+c[8]-c[9]-c[10]-c[11]-c[12]+c[13]+c[14]+c[15]+c[16]-c[17]-c[18]-c[19]-c[20]+c[21]+c[22]+c[23]+c[24]-c[25]-c[26]-c[27]-c[28]+c[29]+c[30]+c[31]+c[32] + -c[33]-c[34]-c[35]-c[36]+c[37]+c[38]+c[39]+c[40]-c[41]-c[42]-c[43]-c[44]+c[45]+c[46]+c[47]+c[48]-c[49]-c[50]-c[51]-c[52]+c[53]+c[54]+c[55]+c[56]-c[57]-c[58]-c[59]-c[60]+c[61]+c[62], +-c[0]-c[1]+c[2]-c[3]+c[4]+c[5]-c[6]+c[7]-c[8]-c[9]+c[10]-c[11]+c[12]+c[13]-c[14]+c[15]-c[16]-c[17]+c[18]-c[19]+c[20]+c[21]-c[22]+c[23]-c[24]-c[25]+c[26]-c[27]+c[28]+c[29]-c[30]+c[31]-c[32] + -c[33]+c[34]-c[35]+c[36]+c[37]-c[38]+c[39]-c[40]-c[41]+c[42]-c[43]+c[44]+c[45]-c[46]+c[47]-c[48]-c[49]+c[50]-c[51]+c[52]+c[53]-c[54]+c[55]-c[56]-c[57]+c[58]-c[59]+c[60]+c[61]-c[62], ++c[0]+c[1]+c[2]+c[3]+c[4]+c[5]+c[6]-c[7]-c[8]-c[9]-c[10]-c[11]-c[12]-c[13]-c[14]+c[15]+c[16]+c[17]+c[18]+c[19]+c[20]+c[21]+c[22]-c[23]-c[24]-c[25]-c[26]-c[27]-c[28]-c[29]-c[30]+c[31]+c[32] + +c[33]+c[34]+c[35]+c[36]+c[37]+c[38]-c[39]-c[40]-c[41]-c[42]-c[43]-c[44]-c[45]-c[46]+c[47]+c[48]+c[49]+c[50]+c[51]+c[52]+c[53]+c[54]-c[55]-c[56]-c[57]-c[58]-c[59]-c[60]-c[61]-c[62], +-c[0]+c[1]-c[2]+c[3]-c[4]+c[5]-c[6]-c[7]+c[8]-c[9]+c[10]-c[11]+c[12]-c[13]+c[14]+c[15]-c[16]+c[17]-c[18]+c[19]-c[20]+c[21]-c[22]-c[23]+c[24]-c[25]+c[26]-c[27]+c[28]-c[29]+c[30]+c[31]-c[32] + +c[33]-c[34]+c[35]-c[36]+c[37]-c[38]-c[39]+c[40]-c[41]+c[42]-c[43]+c[44]-c[45]+c[46]+c[47]-c[48]+c[49]-c[50]+c[51]-c[52]+c[53]-c[54]-c[55]+c[56]-c[57]+c[58]-c[59]+c[60]-c[61]+c[62], ++c[0]-c[1]-c[2]+c[3]+c[4]-c[5]-c[6]-c[7]-c[8]+c[9]+c[10]-c[11]-c[12]+c[13]+c[14]+c[15]+c[16]-c[17]-c[18]+c[19]+c[20]-c[21]-c[22]-c[23]-c[24]+c[25]+c[26]-c[27]-c[28]+c[29]+c[30]+c[31]+c[32] + -c[33]-c[34]+c[35]+c[36]-c[37]-c[38]-c[39]-c[40]+c[41]+c[42]-c[43]-c[44]+c[45]+c[46]+c[47]+c[48]-c[49]-c[50]+c[51]+c[52]-c[53]-c[54]-c[55]-c[56]+c[57]+c[58]-c[59]-c[60]+c[61]+c[62], +-c[0]-c[1]+c[2]+c[3]-c[4]-c[5]+c[6]-c[7]+c[8]+c[9]-c[10]-c[11]+c[12]+c[13]-c[14]+c[15]-c[16]-c[17]+c[18]+c[19]-c[20]-c[21]+c[22]-c[23]+c[24]+c[25]-c[26]-c[27]+c[28]+c[29]-c[30]+c[31]-c[32] + -c[33]+c[34]+c[35]-c[36]-c[37]+c[38]-c[39]+c[40]+c[41]-c[42]-c[43]+c[44]+c[45]-c[46]+c[47]-c[48]-c[49]+c[50]+c[51]-c[52]-c[53]+c[54]-c[55]+c[56]+c[57]-c[58]-c[59]+c[60]+c[61]-c[62], ++c[0]+c[1]+c[2]-c[3]-c[4]-c[5]-c[6]-c[7]-c[8]-c[9]-c[10]+c[11]+c[12]+c[13]+c[14]+c[15]+c[16]+c[17]+c[18]-c[19]-c[20]-c[21]-c[22]-c[23]-c[24]-c[25]-c[26]+c[27]+c[28]+c[29]+c[30]+c[31]+c[32] + +c[33]+c[34]-c[35]-c[36]-c[37]-c[38]-c[39]-c[40]-c[41]-c[42]+c[43]+c[44]+c[45]+c[46]+c[47]+c[48]+c[49]+c[50]-c[51]-c[52]-c[53]-c[54]-c[55]-c[56]-c[57]-c[58]+c[59]+c[60]+c[61]+c[62], +-c[0]+c[1]-c[2]-c[3]+c[4]-c[5]+c[6]-c[7]+c[8]-c[9]+c[10]+c[11]-c[12]+c[13]-c[14]+c[15]-c[16]+c[17]-c[18]-c[19]+c[20]-c[21]+c[22]-c[23]+c[24]-c[25]+c[26]+c[27]-c[28]+c[29]-c[30]+c[31]-c[32] + +c[33]-c[34]-c[35]+c[36]-c[37]+c[38]-c[39]+c[40]-c[41]+c[42]+c[43]-c[44]+c[45]-c[46]+c[47]-c[48]+c[49]-c[50]-c[51]+c[52]-c[53]+c[54]-c[55]+c[56]-c[57]+c[58]+c[59]-c[60]+c[61]-c[62], ++c[0]-c[1]-c[2]-c[3]-c[4]+c[5]+c[6]-c[7]-c[8]+c[9]+c[10]+c[11]+c[12]-c[13]-c[14]+c[15]+c[16]-c[17]-c[18]-c[19]-c[20]+c[21]+c[22]-c[23]-c[24]+c[25]+c[26]+c[27]+c[28]-c[29]-c[30]+c[31]+c[32] + -c[33]-c[34]-c[35]-c[36]+c[37]+c[38]-c[39]-c[40]+c[41]+c[42]+c[43]+c[44]-c[45]-c[46]+c[47]+c[48]-c[49]-c[50]-c[51]-c[52]+c[53]+c[54]-c[55]-c[56]+c[57]+c[58]+c[59]+c[60]-c[61]-c[62], +-c[0]-c[1]+c[2]-c[3]+c[4]+c[5]-c[6]-c[7]+c[8]+c[9]-c[10]+c[11]-c[12]-c[13]+c[14]+c[15]-c[16]-c[17]+c[18]-c[19]+c[20]+c[21]-c[22]-c[23]+c[24]+c[25]-c[26]+c[27]-c[28]-c[29]+c[30]+c[31]-c[32] + -c[33]+c[34]-c[35]+c[36]+c[37]-c[38]-c[39]+c[40]+c[41]-c[42]+c[43]-c[44]-c[45]+c[46]+c[47]-c[48]-c[49]+c[50]-c[51]+c[52]+c[53]-c[54]-c[55]+c[56]+c[57]-c[58]+c[59]-c[60]-c[61]+c[62], ++c[0]+c[1]+c[2]+c[3]+c[4]+c[5]+c[6]+c[7]+c[8]+c[9]+c[10]+c[11]+c[12]+c[13]+c[14]-c[15]-c[16]-c[17]-c[18]-c[19]-c[20]-c[21]-c[22]-c[23]-c[24]-c[25]-c[26]-c[27]-c[28]-c[29]-c[30]+c[31]+c[32] + +c[33]+c[34]+c[35]+c[36]+c[37]+c[38]+c[39]+c[40]+c[41]+c[42]+c[43]+c[44]+c[45]+c[46]-c[47]-c[48]-c[49]-c[50]-c[51]-c[52]-c[53]-c[54]-c[55]-c[56]-c[57]-c[58]-c[59]-c[60]-c[61]-c[62], +-c[0]+c[1]-c[2]+c[3]-c[4]+c[5]-c[6]+c[7]-c[8]+c[9]-c[10]+c[11]-c[12]+c[13]-c[14]-c[15]+c[16]-c[17]+c[18]-c[19]+c[20]-c[21]+c[22]-c[23]+c[24]-c[25]+c[26]-c[27]+c[28]-c[29]+c[30]+c[31]-c[32] + +c[33]-c[34]+c[35]-c[36]+c[37]-c[38]+c[39]-c[40]+c[41]-c[42]+c[43]-c[44]+c[45]-c[46]-c[47]+c[48]-c[49]+c[50]-c[51]+c[52]-c[53]+c[54]-c[55]+c[56]-c[57]+c[58]-c[59]+c[60]-c[61]+c[62], ++c[0]-c[1]-c[2]+c[3]+c[4]-c[5]-c[6]+c[7]+c[8]-c[9]-c[10]+c[11]+c[12]-c[13]-c[14]-c[15]-c[16]+c[17]+c[18]-c[19]-c[20]+c[21]+c[22]-c[23]-c[24]+c[25]+c[26]-c[27]-c[28]+c[29]+c[30]+c[31]+c[32] + -c[33]-c[34]+c[35]+c[36]-c[37]-c[38]+c[39]+c[40]-c[41]-c[42]+c[43]+c[44]-c[45]-c[46]-c[47]-c[48]+c[49]+c[50]-c[51]-c[52]+c[53]+c[54]-c[55]-c[56]+c[57]+c[58]-c[59]-c[60]+c[61]+c[62], +-c[0]-c[1]+c[2]+c[3]-c[4]-c[5]+c[6]+c[7]-c[8]-c[9]+c[10]+c[11]-c[12]-c[13]+c[14]-c[15]+c[16]+c[17]-c[18]-c[19]+c[20]+c[21]-c[22]-c[23]+c[24]+c[25]-c[26]-c[27]+c[28]+c[29]-c[30]+c[31]-c[32] + -c[33]+c[34]+c[35]-c[36]-c[37]+c[38]+c[39]-c[40]-c[41]+c[42]+c[43]-c[44]-c[45]+c[46]-c[47]+c[48]+c[49]-c[50]-c[51]+c[52]+c[53]-c[54]-c[55]+c[56]+c[57]-c[58]-c[59]+c[60]+c[61]-c[62], ++c[0]+c[1]+c[2]-c[3]-c[4]-c[5]-c[6]+c[7]+c[8]+c[9]+c[10]-c[11]-c[12]-c[13]-c[14]-c[15]-c[16]-c[17]-c[18]+c[19]+c[20]+c[21]+c[22]-c[23]-c[24]-c[25]-c[26]+c[27]+c[28]+c[29]+c[30]+c[31]+c[32] + +c[33]+c[34]-c[35]-c[36]-c[37]-c[38]+c[39]+c[40]+c[41]+c[42]-c[43]-c[44]-c[45]-c[46]-c[47]-c[48]-c[49]-c[50]+c[51]+c[52]+c[53]+c[54]-c[55]-c[56]-c[57]-c[58]+c[59]+c[60]+c[61]+c[62], +-c[0]+c[1]-c[2]-c[3]+c[4]-c[5]+c[6]+c[7]-c[8]+c[9]-c[10]-c[11]+c[12]-c[13]+c[14]-c[15]+c[16]-c[17]+c[18]+c[19]-c[20]+c[21]-c[22]-c[23]+c[24]-c[25]+c[26]+c[27]-c[28]+c[29]-c[30]+c[31]-c[32] + +c[33]-c[34]-c[35]+c[36]-c[37]+c[38]+c[39]-c[40]+c[41]-c[42]-c[43]+c[44]-c[45]+c[46]-c[47]+c[48]-c[49]+c[50]+c[51]-c[52]+c[53]-c[54]-c[55]+c[56]-c[57]+c[58]+c[59]-c[60]+c[61]-c[62], ++c[0]-c[1]-c[2]-c[3]-c[4]+c[5]+c[6]+c[7]+c[8]-c[9]-c[10]-c[11]-c[12]+c[13]+c[14]-c[15]-c[16]+c[17]+c[18]+c[19]+c[20]-c[21]-c[22]-c[23]-c[24]+c[25]+c[26]+c[27]+c[28]-c[29]-c[30]+c[31]+c[32] + -c[33]-c[34]-c[35]-c[36]+c[37]+c[38]+c[39]+c[40]-c[41]-c[42]-c[43]-c[44]+c[45]+c[46]-c[47]-c[48]+c[49]+c[50]+c[51]+c[52]-c[53]-c[54]-c[55]-c[56]+c[57]+c[58]+c[59]+c[60]-c[61]-c[62], +-c[0]-c[1]+c[2]-c[3]+c[4]+c[5]-c[6]+c[7]-c[8]-c[9]+c[10]-c[11]+c[12]+c[13]-c[14]-c[15]+c[16]+c[17]-c[18]+c[19]-c[20]-c[21]+c[22]-c[23]+c[24]+c[25]-c[26]+c[27]-c[28]-c[29]+c[30]+c[31]-c[32] + -c[33]+c[34]-c[35]+c[36]+c[37]-c[38]+c[39]-c[40]-c[41]+c[42]-c[43]+c[44]+c[45]-c[46]-c[47]+c[48]+c[49]-c[50]+c[51]-c[52]-c[53]+c[54]-c[55]+c[56]+c[57]-c[58]+c[59]-c[60]-c[61]+c[62], ++c[0]+c[1]+c[2]+c[3]+c[4]+c[5]+c[6]-c[7]-c[8]-c[9]-c[10]-c[11]-c[12]-c[13]-c[14]-c[15]-c[16]-c[17]-c[18]-c[19]-c[20]-c[21]-c[22]+c[23]+c[24]+c[25]+c[26]+c[27]+c[28]+c[29]+c[30]+c[31]+c[32] + +c[33]+c[34]+c[35]+c[36]+c[37]+c[38]-c[39]-c[40]-c[41]-c[42]-c[43]-c[44]-c[45]-c[46]-c[47]-c[48]-c[49]-c[50]-c[51]-c[52]-c[53]-c[54]+c[55]+c[56]+c[57]+c[58]+c[59]+c[60]+c[61]+c[62], +-c[0]+c[1]-c[2]+c[3]-c[4]+c[5]-c[6]-c[7]+c[8]-c[9]+c[10]-c[11]+c[12]-c[13]+c[14]-c[15]+c[16]-c[17]+c[18]-c[19]+c[20]-c[21]+c[22]+c[23]-c[24]+c[25]-c[26]+c[27]-c[28]+c[29]-c[30]+c[31]-c[32] + +c[33]-c[34]+c[35]-c[36]+c[37]-c[38]-c[39]+c[40]-c[41]+c[42]-c[43]+c[44]-c[45]+c[46]-c[47]+c[48]-c[49]+c[50]-c[51]+c[52]-c[53]+c[54]+c[55]-c[56]+c[57]-c[58]+c[59]-c[60]+c[61]-c[62], ++c[0]-c[1]-c[2]+c[3]+c[4]-c[5]-c[6]-c[7]-c[8]+c[9]+c[10]-c[11]-c[12]+c[13]+c[14]-c[15]-c[16]+c[17]+c[18]-c[19]-c[20]+c[21]+c[22]+c[23]+c[24]-c[25]-c[26]+c[27]+c[28]-c[29]-c[30]+c[31]+c[32] + -c[33]-c[34]+c[35]+c[36]-c[37]-c[38]-c[39]-c[40]+c[41]+c[42]-c[43]-c[44]+c[45]+c[46]-c[47]-c[48]+c[49]+c[50]-c[51]-c[52]+c[53]+c[54]+c[55]+c[56]-c[57]-c[58]+c[59]+c[60]-c[61]-c[62], +-c[0]-c[1]+c[2]+c[3]-c[4]-c[5]+c[6]-c[7]+c[8]+c[9]-c[10]-c[11]+c[12]+c[13]-c[14]-c[15]+c[16]+c[17]-c[18]-c[19]+c[20]+c[21]-c[22]+c[23]-c[24]-c[25]+c[26]+c[27]-c[28]-c[29]+c[30]+c[31]-c[32] + -c[33]+c[34]+c[35]-c[36]-c[37]+c[38]-c[39]+c[40]+c[41]-c[42]-c[43]+c[44]+c[45]-c[46]-c[47]+c[48]+c[49]-c[50]-c[51]+c[52]+c[53]-c[54]+c[55]-c[56]-c[57]+c[58]+c[59]-c[60]-c[61]+c[62], ++c[0]+c[1]+c[2]-c[3]-c[4]-c[5]-c[6]-c[7]-c[8]-c[9]-c[10]+c[11]+c[12]+c[13]+c[14]-c[15]-c[16]-c[17]-c[18]+c[19]+c[20]+c[21]+c[22]+c[23]+c[24]+c[25]+c[26]-c[27]-c[28]-c[29]-c[30]+c[31]+c[32] + +c[33]+c[34]-c[35]-c[36]-c[37]-c[38]-c[39]-c[40]-c[41]-c[42]+c[43]+c[44]+c[45]+c[46]-c[47]-c[48]-c[49]-c[50]+c[51]+c[52]+c[53]+c[54]+c[55]+c[56]+c[57]+c[58]-c[59]-c[60]-c[61]-c[62], +-c[0]+c[1]-c[2]-c[3]+c[4]-c[5]+c[6]-c[7]+c[8]-c[9]+c[10]+c[11]-c[12]+c[13]-c[14]-c[15]+c[16]-c[17]+c[18]+c[19]-c[20]+c[21]-c[22]+c[23]-c[24]+c[25]-c[26]-c[27]+c[28]-c[29]+c[30]+c[31]-c[32] + +c[33]-c[34]-c[35]+c[36]-c[37]+c[38]-c[39]+c[40]-c[41]+c[42]+c[43]-c[44]+c[45]-c[46]-c[47]+c[48]-c[49]+c[50]+c[51]-c[52]+c[53]-c[54]+c[55]-c[56]+c[57]-c[58]-c[59]+c[60]-c[61]+c[62], ++c[0]-c[1]-c[2]-c[3]-c[4]+c[5]+c[6]-c[7]-c[8]+c[9]+c[10]+c[11]+c[12]-c[13]-c[14]-c[15]-c[16]+c[17]+c[18]+c[19]+c[20]-c[21]-c[22]+c[23]+c[24]-c[25]-c[26]-c[27]-c[28]+c[29]+c[30]+c[31]+c[32] + -c[33]-c[34]-c[35]-c[36]+c[37]+c[38]-c[39]-c[40]+c[41]+c[42]+c[43]+c[44]-c[45]-c[46]-c[47]-c[48]+c[49]+c[50]+c[51]+c[52]-c[53]-c[54]+c[55]+c[56]-c[57]-c[58]-c[59]-c[60]+c[61]+c[62], +-c[0]-c[1]+c[2]-c[3]+c[4]+c[5]-c[6]-c[7]+c[8]+c[9]-c[10]+c[11]-c[12]-c[13]+c[14]-c[15]+c[16]+c[17]-c[18]+c[19]-c[20]-c[21]+c[22]+c[23]-c[24]-c[25]+c[26]-c[27]+c[28]+c[29]-c[30]+c[31]-c[32] + -c[33]+c[34]-c[35]+c[36]+c[37]-c[38]-c[39]+c[40]+c[41]-c[42]+c[43]-c[44]-c[45]+c[46]-c[47]+c[48]+c[49]-c[50]+c[51]-c[52]-c[53]+c[54]+c[55]-c[56]-c[57]+c[58]-c[59]+c[60]+c[61]-c[62], ++c[0]+c[1]+c[2]+c[3]+c[4]+c[5]+c[6]+c[7]+c[8]+c[9]+c[10]+c[11]+c[12]+c[13]+c[14]+c[15]+c[16]+c[17]+c[18]+c[19]+c[20]+c[21]+c[22]+c[23]+c[24]+c[25]+c[26]+c[27]+c[28]+c[29]+c[30]-c[31]-c[32] + -c[33]-c[34]-c[35]-c[36]-c[37]-c[38]-c[39]-c[40]-c[41]-c[42]-c[43]-c[44]-c[45]-c[46]-c[47]-c[48]-c[49]-c[50]-c[51]-c[52]-c[53]-c[54]-c[55]-c[56]-c[57]-c[58]-c[59]-c[60]-c[61]-c[62], +-c[0]+c[1]-c[2]+c[3]-c[4]+c[5]-c[6]+c[7]-c[8]+c[9]-c[10]+c[11]-c[12]+c[13]-c[14]+c[15]-c[16]+c[17]-c[18]+c[19]-c[20]+c[21]-c[22]+c[23]-c[24]+c[25]-c[26]+c[27]-c[28]+c[29]-c[30]-c[31]+c[32] + -c[33]+c[34]-c[35]+c[36]-c[37]+c[38]-c[39]+c[40]-c[41]+c[42]-c[43]+c[44]-c[45]+c[46]-c[47]+c[48]-c[49]+c[50]-c[51]+c[52]-c[53]+c[54]-c[55]+c[56]-c[57]+c[58]-c[59]+c[60]-c[61]+c[62], ++c[0]-c[1]-c[2]+c[3]+c[4]-c[5]-c[6]+c[7]+c[8]-c[9]-c[10]+c[11]+c[12]-c[13]-c[14]+c[15]+c[16]-c[17]-c[18]+c[19]+c[20]-c[21]-c[22]+c[23]+c[24]-c[25]-c[26]+c[27]+c[28]-c[29]-c[30]-c[31]-c[32] + +c[33]+c[34]-c[35]-c[36]+c[37]+c[38]-c[39]-c[40]+c[41]+c[42]-c[43]-c[44]+c[45]+c[46]-c[47]-c[48]+c[49]+c[50]-c[51]-c[52]+c[53]+c[54]-c[55]-c[56]+c[57]+c[58]-c[59]-c[60]+c[61]+c[62], +-c[0]-c[1]+c[2]+c[3]-c[4]-c[5]+c[6]+c[7]-c[8]-c[9]+c[10]+c[11]-c[12]-c[13]+c[14]+c[15]-c[16]-c[17]+c[18]+c[19]-c[20]-c[21]+c[22]+c[23]-c[24]-c[25]+c[26]+c[27]-c[28]-c[29]+c[30]-c[31]+c[32] + +c[33]-c[34]-c[35]+c[36]+c[37]-c[38]-c[39]+c[40]+c[41]-c[42]-c[43]+c[44]+c[45]-c[46]-c[47]+c[48]+c[49]-c[50]-c[51]+c[52]+c[53]-c[54]-c[55]+c[56]+c[57]-c[58]-c[59]+c[60]+c[61]-c[62], ++c[0]+c[1]+c[2]-c[3]-c[4]-c[5]-c[6]+c[7]+c[8]+c[9]+c[10]-c[11]-c[12]-c[13]-c[14]+c[15]+c[16]+c[17]+c[18]-c[19]-c[20]-c[21]-c[22]+c[23]+c[24]+c[25]+c[26]-c[27]-c[28]-c[29]-c[30]-c[31]-c[32] + -c[33]-c[34]+c[35]+c[36]+c[37]+c[38]-c[39]-c[40]-c[41]-c[42]+c[43]+c[44]+c[45]+c[46]-c[47]-c[48]-c[49]-c[50]+c[51]+c[52]+c[53]+c[54]-c[55]-c[56]-c[57]-c[58]+c[59]+c[60]+c[61]+c[62], +-c[0]+c[1]-c[2]-c[3]+c[4]-c[5]+c[6]+c[7]-c[8]+c[9]-c[10]-c[11]+c[12]-c[13]+c[14]+c[15]-c[16]+c[17]-c[18]-c[19]+c[20]-c[21]+c[22]+c[23]-c[24]+c[25]-c[26]-c[27]+c[28]-c[29]+c[30]-c[31]+c[32] + -c[33]+c[34]+c[35]-c[36]+c[37]-c[38]-c[39]+c[40]-c[41]+c[42]+c[43]-c[44]+c[45]-c[46]-c[47]+c[48]-c[49]+c[50]+c[51]-c[52]+c[53]-c[54]-c[55]+c[56]-c[57]+c[58]+c[59]-c[60]+c[61]-c[62], ++c[0]-c[1]-c[2]-c[3]-c[4]+c[5]+c[6]+c[7]+c[8]-c[9]-c[10]-c[11]-c[12]+c[13]+c[14]+c[15]+c[16]-c[17]-c[18]-c[19]-c[20]+c[21]+c[22]+c[23]+c[24]-c[25]-c[26]-c[27]-c[28]+c[29]+c[30]-c[31]-c[32] + +c[33]+c[34]+c[35]+c[36]-c[37]-c[38]-c[39]-c[40]+c[41]+c[42]+c[43]+c[44]-c[45]-c[46]-c[47]-c[48]+c[49]+c[50]+c[51]+c[52]-c[53]-c[54]-c[55]-c[56]+c[57]+c[58]+c[59]+c[60]-c[61]-c[62], +-c[0]-c[1]+c[2]-c[3]+c[4]+c[5]-c[6]+c[7]-c[8]-c[9]+c[10]-c[11]+c[12]+c[13]-c[14]+c[15]-c[16]-c[17]+c[18]-c[19]+c[20]+c[21]-c[22]+c[23]-c[24]-c[25]+c[26]-c[27]+c[28]+c[29]-c[30]-c[31]+c[32] + +c[33]-c[34]+c[35]-c[36]-c[37]+c[38]-c[39]+c[40]+c[41]-c[42]+c[43]-c[44]-c[45]+c[46]-c[47]+c[48]+c[49]-c[50]+c[51]-c[52]-c[53]+c[54]-c[55]+c[56]+c[57]-c[58]+c[59]-c[60]-c[61]+c[62], ++c[0]+c[1]+c[2]+c[3]+c[4]+c[5]+c[6]-c[7]-c[8]-c[9]-c[10]-c[11]-c[12]-c[13]-c[14]+c[15]+c[16]+c[17]+c[18]+c[19]+c[20]+c[21]+c[22]-c[23]-c[24]-c[25]-c[26]-c[27]-c[28]-c[29]-c[30]-c[31]-c[32] + -c[33]-c[34]-c[35]-c[36]-c[37]-c[38]+c[39]+c[40]+c[41]+c[42]+c[43]+c[44]+c[45]+c[46]-c[47]-c[48]-c[49]-c[50]-c[51]-c[52]-c[53]-c[54]+c[55]+c[56]+c[57]+c[58]+c[59]+c[60]+c[61]+c[62], +-c[0]+c[1]-c[2]+c[3]-c[4]+c[5]-c[6]-c[7]+c[8]-c[9]+c[10]-c[11]+c[12]-c[13]+c[14]+c[15]-c[16]+c[17]-c[18]+c[19]-c[20]+c[21]-c[22]-c[23]+c[24]-c[25]+c[26]-c[27]+c[28]-c[29]+c[30]-c[31]+c[32] + -c[33]+c[34]-c[35]+c[36]-c[37]+c[38]+c[39]-c[40]+c[41]-c[42]+c[43]-c[44]+c[45]-c[46]-c[47]+c[48]-c[49]+c[50]-c[51]+c[52]-c[53]+c[54]+c[55]-c[56]+c[57]-c[58]+c[59]-c[60]+c[61]-c[62], ++c[0]-c[1]-c[2]+c[3]+c[4]-c[5]-c[6]-c[7]-c[8]+c[9]+c[10]-c[11]-c[12]+c[13]+c[14]+c[15]+c[16]-c[17]-c[18]+c[19]+c[20]-c[21]-c[22]-c[23]-c[24]+c[25]+c[26]-c[27]-c[28]+c[29]+c[30]-c[31]-c[32] + +c[33]+c[34]-c[35]-c[36]+c[37]+c[38]+c[39]+c[40]-c[41]-c[42]+c[43]+c[44]-c[45]-c[46]-c[47]-c[48]+c[49]+c[50]-c[51]-c[52]+c[53]+c[54]+c[55]+c[56]-c[57]-c[58]+c[59]+c[60]-c[61]-c[62], +-c[0]-c[1]+c[2]+c[3]-c[4]-c[5]+c[6]-c[7]+c[8]+c[9]-c[10]-c[11]+c[12]+c[13]-c[14]+c[15]-c[16]-c[17]+c[18]+c[19]-c[20]-c[21]+c[22]-c[23]+c[24]+c[25]-c[26]-c[27]+c[28]+c[29]-c[30]-c[31]+c[32] + +c[33]-c[34]-c[35]+c[36]+c[37]-c[38]+c[39]-c[40]-c[41]+c[42]+c[43]-c[44]-c[45]+c[46]-c[47]+c[48]+c[49]-c[50]-c[51]+c[52]+c[53]-c[54]+c[55]-c[56]-c[57]+c[58]+c[59]-c[60]-c[61]+c[62], ++c[0]+c[1]+c[2]-c[3]-c[4]-c[5]-c[6]-c[7]-c[8]-c[9]-c[10]+c[11]+c[12]+c[13]+c[14]+c[15]+c[16]+c[17]+c[18]-c[19]-c[20]-c[21]-c[22]-c[23]-c[24]-c[25]-c[26]+c[27]+c[28]+c[29]+c[30]-c[31]-c[32] + -c[33]-c[34]+c[35]+c[36]+c[37]+c[38]+c[39]+c[40]+c[41]+c[42]-c[43]-c[44]-c[45]-c[46]-c[47]-c[48]-c[49]-c[50]+c[51]+c[52]+c[53]+c[54]+c[55]+c[56]+c[57]+c[58]-c[59]-c[60]-c[61]-c[62], +-c[0]+c[1]-c[2]-c[3]+c[4]-c[5]+c[6]-c[7]+c[8]-c[9]+c[10]+c[11]-c[12]+c[13]-c[14]+c[15]-c[16]+c[17]-c[18]-c[19]+c[20]-c[21]+c[22]-c[23]+c[24]-c[25]+c[26]+c[27]-c[28]+c[29]-c[30]-c[31]+c[32] + -c[33]+c[34]+c[35]-c[36]+c[37]-c[38]+c[39]-c[40]+c[41]-c[42]-c[43]+c[44]-c[45]+c[46]-c[47]+c[48]-c[49]+c[50]+c[51]-c[52]+c[53]-c[54]+c[55]-c[56]+c[57]-c[58]-c[59]+c[60]-c[61]+c[62], ++c[0]-c[1]-c[2]-c[3]-c[4]+c[5]+c[6]-c[7]-c[8]+c[9]+c[10]+c[11]+c[12]-c[13]-c[14]+c[15]+c[16]-c[17]-c[18]-c[19]-c[20]+c[21]+c[22]-c[23]-c[24]+c[25]+c[26]+c[27]+c[28]-c[29]-c[30]-c[31]-c[32] + +c[33]+c[34]+c[35]+c[36]-c[37]-c[38]+c[39]+c[40]-c[41]-c[42]-c[43]-c[44]+c[45]+c[46]-c[47]-c[48]+c[49]+c[50]+c[51]+c[52]-c[53]-c[54]+c[55]+c[56]-c[57]-c[58]-c[59]-c[60]+c[61]+c[62], +-c[0]-c[1]+c[2]-c[3]+c[4]+c[5]-c[6]-c[7]+c[8]+c[9]-c[10]+c[11]-c[12]-c[13]+c[14]+c[15]-c[16]-c[17]+c[18]-c[19]+c[20]+c[21]-c[22]-c[23]+c[24]+c[25]-c[26]+c[27]-c[28]-c[29]+c[30]-c[31]+c[32] + +c[33]-c[34]+c[35]-c[36]-c[37]+c[38]+c[39]-c[40]-c[41]+c[42]-c[43]+c[44]+c[45]-c[46]-c[47]+c[48]+c[49]-c[50]+c[51]-c[52]-c[53]+c[54]+c[55]-c[56]-c[57]+c[58]-c[59]+c[60]+c[61]-c[62], ++c[0]+c[1]+c[2]+c[3]+c[4]+c[5]+c[6]+c[7]+c[8]+c[9]+c[10]+c[11]+c[12]+c[13]+c[14]-c[15]-c[16]-c[17]-c[18]-c[19]-c[20]-c[21]-c[22]-c[23]-c[24]-c[25]-c[26]-c[27]-c[28]-c[29]-c[30]-c[31]-c[32] + -c[33]-c[34]-c[35]-c[36]-c[37]-c[38]-c[39]-c[40]-c[41]-c[42]-c[43]-c[44]-c[45]-c[46]+c[47]+c[48]+c[49]+c[50]+c[51]+c[52]+c[53]+c[54]+c[55]+c[56]+c[57]+c[58]+c[59]+c[60]+c[61]+c[62], +-c[0]+c[1]-c[2]+c[3]-c[4]+c[5]-c[6]+c[7]-c[8]+c[9]-c[10]+c[11]-c[12]+c[13]-c[14]-c[15]+c[16]-c[17]+c[18]-c[19]+c[20]-c[21]+c[22]-c[23]+c[24]-c[25]+c[26]-c[27]+c[28]-c[29]+c[30]-c[31]+c[32] + -c[33]+c[34]-c[35]+c[36]-c[37]+c[38]-c[39]+c[40]-c[41]+c[42]-c[43]+c[44]-c[45]+c[46]+c[47]-c[48]+c[49]-c[50]+c[51]-c[52]+c[53]-c[54]+c[55]-c[56]+c[57]-c[58]+c[59]-c[60]+c[61]-c[62], ++c[0]-c[1]-c[2]+c[3]+c[4]-c[5]-c[6]+c[7]+c[8]-c[9]-c[10]+c[11]+c[12]-c[13]-c[14]-c[15]-c[16]+c[17]+c[18]-c[19]-c[20]+c[21]+c[22]-c[23]-c[24]+c[25]+c[26]-c[27]-c[28]+c[29]+c[30]-c[31]-c[32] + +c[33]+c[34]-c[35]-c[36]+c[37]+c[38]-c[39]-c[40]+c[41]+c[42]-c[43]-c[44]+c[45]+c[46]+c[47]+c[48]-c[49]-c[50]+c[51]+c[52]-c[53]-c[54]+c[55]+c[56]-c[57]-c[58]+c[59]+c[60]-c[61]-c[62], +-c[0]-c[1]+c[2]+c[3]-c[4]-c[5]+c[6]+c[7]-c[8]-c[9]+c[10]+c[11]-c[12]-c[13]+c[14]-c[15]+c[16]+c[17]-c[18]-c[19]+c[20]+c[21]-c[22]-c[23]+c[24]+c[25]-c[26]-c[27]+c[28]+c[29]-c[30]-c[31]+c[32] + +c[33]-c[34]-c[35]+c[36]+c[37]-c[38]-c[39]+c[40]+c[41]-c[42]-c[43]+c[44]+c[45]-c[46]+c[47]-c[48]-c[49]+c[50]+c[51]-c[52]-c[53]+c[54]+c[55]-c[56]-c[57]+c[58]+c[59]-c[60]-c[61]+c[62], ++c[0]+c[1]+c[2]-c[3]-c[4]-c[5]-c[6]+c[7]+c[8]+c[9]+c[10]-c[11]-c[12]-c[13]-c[14]-c[15]-c[16]-c[17]-c[18]+c[19]+c[20]+c[21]+c[22]-c[23]-c[24]-c[25]-c[26]+c[27]+c[28]+c[29]+c[30]-c[31]-c[32] + -c[33]-c[34]+c[35]+c[36]+c[37]+c[38]-c[39]-c[40]-c[41]-c[42]+c[43]+c[44]+c[45]+c[46]+c[47]+c[48]+c[49]+c[50]-c[51]-c[52]-c[53]-c[54]+c[55]+c[56]+c[57]+c[58]-c[59]-c[60]-c[61]-c[62], +-c[0]+c[1]-c[2]-c[3]+c[4]-c[5]+c[6]+c[7]-c[8]+c[9]-c[10]-c[11]+c[12]-c[13]+c[14]-c[15]+c[16]-c[17]+c[18]+c[19]-c[20]+c[21]-c[22]-c[23]+c[24]-c[25]+c[26]+c[27]-c[28]+c[29]-c[30]-c[31]+c[32] + -c[33]+c[34]+c[35]-c[36]+c[37]-c[38]-c[39]+c[40]-c[41]+c[42]+c[43]-c[44]+c[45]-c[46]+c[47]-c[48]+c[49]-c[50]-c[51]+c[52]-c[53]+c[54]+c[55]-c[56]+c[57]-c[58]-c[59]+c[60]-c[61]+c[62], ++c[0]-c[1]-c[2]-c[3]-c[4]+c[5]+c[6]+c[7]+c[8]-c[9]-c[10]-c[11]-c[12]+c[13]+c[14]-c[15]-c[16]+c[17]+c[18]+c[19]+c[20]-c[21]-c[22]-c[23]-c[24]+c[25]+c[26]+c[27]+c[28]-c[29]-c[30]-c[31]-c[32] + +c[33]+c[34]+c[35]+c[36]-c[37]-c[38]-c[39]-c[40]+c[41]+c[42]+c[43]+c[44]-c[45]-c[46]+c[47]+c[48]-c[49]-c[50]-c[51]-c[52]+c[53]+c[54]+c[55]+c[56]-c[57]-c[58]-c[59]-c[60]+c[61]+c[62], +-c[0]-c[1]+c[2]-c[3]+c[4]+c[5]-c[6]+c[7]-c[8]-c[9]+c[10]-c[11]+c[12]+c[13]-c[14]-c[15]+c[16]+c[17]-c[18]+c[19]-c[20]-c[21]+c[22]-c[23]+c[24]+c[25]-c[26]+c[27]-c[28]-c[29]+c[30]-c[31]+c[32] + +c[33]-c[34]+c[35]-c[36]-c[37]+c[38]-c[39]+c[40]+c[41]-c[42]+c[43]-c[44]-c[45]+c[46]+c[47]-c[48]-c[49]+c[50]-c[51]+c[52]+c[53]-c[54]+c[55]-c[56]-c[57]+c[58]-c[59]+c[60]+c[61]-c[62], ++c[0]+c[1]+c[2]+c[3]+c[4]+c[5]+c[6]-c[7]-c[8]-c[9]-c[10]-c[11]-c[12]-c[13]-c[14]-c[15]-c[16]-c[17]-c[18]-c[19]-c[20]-c[21]-c[22]+c[23]+c[24]+c[25]+c[26]+c[27]+c[28]+c[29]+c[30]-c[31]-c[32] + -c[33]-c[34]-c[35]-c[36]-c[37]-c[38]+c[39]+c[40]+c[41]+c[42]+c[43]+c[44]+c[45]+c[46]+c[47]+c[48]+c[49]+c[50]+c[51]+c[52]+c[53]+c[54]-c[55]-c[56]-c[57]-c[58]-c[59]-c[60]-c[61]-c[62], +-c[0]+c[1]-c[2]+c[3]-c[4]+c[5]-c[6]-c[7]+c[8]-c[9]+c[10]-c[11]+c[12]-c[13]+c[14]-c[15]+c[16]-c[17]+c[18]-c[19]+c[20]-c[21]+c[22]+c[23]-c[24]+c[25]-c[26]+c[27]-c[28]+c[29]-c[30]-c[31]+c[32] + -c[33]+c[34]-c[35]+c[36]-c[37]+c[38]+c[39]-c[40]+c[41]-c[42]+c[43]-c[44]+c[45]-c[46]+c[47]-c[48]+c[49]-c[50]+c[51]-c[52]+c[53]-c[54]-c[55]+c[56]-c[57]+c[58]-c[59]+c[60]-c[61]+c[62], ++c[0]-c[1]-c[2]+c[3]+c[4]-c[5]-c[6]-c[7]-c[8]+c[9]+c[10]-c[11]-c[12]+c[13]+c[14]-c[15]-c[16]+c[17]+c[18]-c[19]-c[20]+c[21]+c[22]+c[23]+c[24]-c[25]-c[26]+c[27]+c[28]-c[29]-c[30]-c[31]-c[32] + +c[33]+c[34]-c[35]-c[36]+c[37]+c[38]+c[39]+c[40]-c[41]-c[42]+c[43]+c[44]-c[45]-c[46]+c[47]+c[48]-c[49]-c[50]+c[51]+c[52]-c[53]-c[54]-c[55]-c[56]+c[57]+c[58]-c[59]-c[60]+c[61]+c[62], +-c[0]-c[1]+c[2]+c[3]-c[4]-c[5]+c[6]-c[7]+c[8]+c[9]-c[10]-c[11]+c[12]+c[13]-c[14]-c[15]+c[16]+c[17]-c[18]-c[19]+c[20]+c[21]-c[22]+c[23]-c[24]-c[25]+c[26]+c[27]-c[28]-c[29]+c[30]-c[31]+c[32] + +c[33]-c[34]-c[35]+c[36]+c[37]-c[38]+c[39]-c[40]-c[41]+c[42]+c[43]-c[44]-c[45]+c[46]+c[47]-c[48]-c[49]+c[50]+c[51]-c[52]-c[53]+c[54]-c[55]+c[56]+c[57]-c[58]-c[59]+c[60]+c[61]-c[62], ++c[0]+c[1]+c[2]-c[3]-c[4]-c[5]-c[6]-c[7]-c[8]-c[9]-c[10]+c[11]+c[12]+c[13]+c[14]-c[15]-c[16]-c[17]-c[18]+c[19]+c[20]+c[21]+c[22]+c[23]+c[24]+c[25]+c[26]-c[27]-c[28]-c[29]-c[30]-c[31]-c[32] + -c[33]-c[34]+c[35]+c[36]+c[37]+c[38]+c[39]+c[40]+c[41]+c[42]-c[43]-c[44]-c[45]-c[46]+c[47]+c[48]+c[49]+c[50]-c[51]-c[52]-c[53]-c[54]-c[55]-c[56]-c[57]-c[58]+c[59]+c[60]+c[61]+c[62], +-c[0]+c[1]-c[2]-c[3]+c[4]-c[5]+c[6]-c[7]+c[8]-c[9]+c[10]+c[11]-c[12]+c[13]-c[14]-c[15]+c[16]-c[17]+c[18]+c[19]-c[20]+c[21]-c[22]+c[23]-c[24]+c[25]-c[26]-c[27]+c[28]-c[29]+c[30]-c[31]+c[32] + -c[33]+c[34]+c[35]-c[36]+c[37]-c[38]+c[39]-c[40]+c[41]-c[42]-c[43]+c[44]-c[45]+c[46]+c[47]-c[48]+c[49]-c[50]-c[51]+c[52]-c[53]+c[54]-c[55]+c[56]-c[57]+c[58]+c[59]-c[60]+c[61]-c[62], ++c[0]-c[1]-c[2]-c[3]-c[4]+c[5]+c[6]-c[7]-c[8]+c[9]+c[10]+c[11]+c[12]-c[13]-c[14]-c[15]-c[16]+c[17]+c[18]+c[19]+c[20]-c[21]-c[22]+c[23]+c[24]-c[25]-c[26]-c[27]-c[28]+c[29]+c[30]-c[31]-c[32] + +c[33]+c[34]+c[35]+c[36]-c[37]-c[38]+c[39]+c[40]-c[41]-c[42]-c[43]-c[44]+c[45]+c[46]+c[47]+c[48]-c[49]-c[50]-c[51]-c[52]+c[53]+c[54]-c[55]-c[56]+c[57]+c[58]+c[59]+c[60]-c[61]-c[62], +-c[0]-c[1]+c[2]-c[3]+c[4]+c[5]-c[6]-c[7]+c[8]+c[9]-c[10]+c[11]-c[12]-c[13]+c[14]-c[15]+c[16]+c[17]-c[18]+c[19]-c[20]-c[21]+c[22]+c[23]-c[24]-c[25]+c[26]-c[27]+c[28]+c[29]-c[30]-c[31]+c[32] + +c[33]-c[34]+c[35]-c[36]-c[37]+c[38]+c[39]-c[40]-c[41]+c[42]-c[43]+c[44]+c[45]-c[46]+c[47]-c[48]-c[49]+c[50]-c[51]+c[52]+c[53]-c[54]-c[55]+c[56]+c[57]-c[58]+c[59]-c[60]-c[61]+c[62], + }; + int word = 0, best = 0, next = 0; + for (int msg = 0 ; msg < W; ++msg) { + if (sum[msg] > best) { + next = best; + best = sum[msg]; + word = msg; + } else if (sum[msg] > next) { + next = sum[msg]; + } + } + if (best == next) + return -1; + return word; + } +}; + }