/* Soft decoder for Simplex codes Copyright 2020 Ahmet Inan */ #pragma once namespace CODE { template class SimplexDecoder { static const int W = 1 << K; static const int N = (1 << K) - 1; int8_t mod[W*N]; static bool parity(unsigned x) { x ^= x >> 16; x ^= x >> 8; x ^= x >> 4; x ^= x >> 2; x ^= x >> 1; return x & 1; } public: SimplexDecoder() { for (int msg = 0; msg < W; ++msg) for (int i = 0; i < N; ++i) mod[msg*N+i] = 1 - 2 * parity(msg&(i+1)); } int operator()(const int8_t *code) { int word = 0, best = 0, next = 0; for (int msg = 0; msg < W; ++msg) { int sum = 0; for (int i = 0; i < N; ++i) sum += mod[msg*N+i] * code[i]; if (sum > best) { next = best; best = sum; word = msg; } else if (sum > next) { next = sum; } } if (best == next) return -1; return word; } }; 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; } }; }