From d764ce7e9ccf0f1bf9c22c9dfac2b0a52cd2064c Mon Sep 17 00:00:00 2001 From: mothcompute Date: Mon, 2 Oct 2023 00:49:00 -0700 Subject: [PATCH] source code --- .gitignore | 3 + README.md | 2 + UNLICENSE | 24 + huff | 3 + huffcvt.c | 16 + main.c | 5200 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 5248 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 UNLICENSE create mode 100755 huff create mode 100644 huffcvt.c create mode 100644 main.c diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2eebb68 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +a.out +huffcv.awk +old diff --git a/README.md b/README.md new file mode 100644 index 0000000..a65a627 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# MPEG-1 Layer III +## the best audio format in fact diff --git a/UNLICENSE b/UNLICENSE new file mode 100644 index 0000000..68a49da --- /dev/null +++ b/UNLICENSE @@ -0,0 +1,24 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to diff --git a/huff b/huff new file mode 100755 index 0000000..6d247b5 --- /dev/null +++ b/huff @@ -0,0 +1,3 @@ +echo -e ", {\t\t\t\t\t\t\t// $1" +eval `wl-paste|sed 's/^/\.\/huffcvt /g;s/$/;/g'` +echo -ne '\t}' diff --git a/huffcvt.c b/huffcvt.c new file mode 100644 index 0000000..a2b9596 --- /dev/null +++ b/huffcvt.c @@ -0,0 +1,16 @@ +#include +#include + +unsigned long btoi(char* s) { + unsigned long r = 0; + int l = strlen(s) - 1; + for(int i = l; i >= 0; i--) { + r <<= 1; + r |= (s[l-i]-'0'); + } + return r; +} + +int main(int argc, char** argv) { + printf("\t\t{%s,%s,%s,%i},\n", argv[1], argv[2], argv[3], btoi(argv[4])); +} diff --git a/main.c b/main.c new file mode 100644 index 0000000..9a21036 --- /dev/null +++ b/main.c @@ -0,0 +1,5200 @@ +#include +#include +#include +#include +#include +#include +#include + +// get bit big endian +#define bitb(x, y) ((((uint8_t*)(x))[y >> 3] >> (7 - (y & 7))) & 1) +#define cast(x, y) (*((x*)&(y))) + +uint32_t bitrb(uint8_t* s, uint32_t b, char e) { // bit range big endian + uint32_t a = 0; + for(int i = 0; i < e; i++) a = (a << 1) | bitb(s, b+i); + printf("bitrb %X\n", a); + return a; +} + +uint16_t l3_bitrates[16] = {0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 0}; +uint16_t l3_smprates[4] = {44100, 48000, 32000, 0}; + +uint8_t sf[3][33] = { + { // 32000hz band + 4,4,4,4,4,4,6,6,8,10,12,16,20,24,30,38,46,56,68,84,102, + 4,4,4,4,6,8,12,16,20,26,34,42 + }, { // 44100hz band + 4,4,4,4,4,4,6,6,8,8,10,12,16,20,24,28,34,42,50,54,76, + 4,4,4,4,6,8,10,12,14,18,22,30 + }, { // 48000hz band + 4,4,4,4,4,4,6,6,6,8,10,12,16,18,22,28,34,40,46,54,54, + 4,4,4,4,6,6,10,12,14,16,20,26 + } +}; + +uint8_t preemph[21] = {0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,2,3,3,3,2}; + +long double alias[8] = { + -.6, + -.535, + -.33, + -.185, + -.095, + -.041, + -.0142, + -.0037 +}; + +// Huffman code table for quadruples (A) +// search by value +uint8_t hquada[16] = { + 0b10000000, + 0b01010000, + 0b01000000, + 0b00101000, + 0b01100000, + 0b00010100, + 0b00100000, + 0b00010000, + 0b01110000, + 0b00011000, + 0b00110000, + 0b00000000, + 0b00111000, + 0b00001000, + 0b00001100, + 0b00000100, +}; + +// Huffman code table for quadruples (B) +// What The Hell +// search by index +uint8_t hquadb[16] = { + 15, + 14, + 13, + 12, + 11, + 10, + 9, + 8, + 7, + 6, + 5, + 4, + 3, + 2, + 1, + 0 +}; + +uint32_t huff[33][256][4] = { + { // 0 + {0,0,0} + }, { // 1 + {0,0,1,1}, + {0,1,3,1}, + {1,0,2,1}, + {1,1,3,0} + }, { // 2 + {0,0,1,1}, + {0,1,3,2}, + {0,2,6,1}, + {1,0,3,3}, + {1,1,3,1}, + {1,2,5,1}, + {2,0,5,3}, + {2,1,5,2}, + {2,2,6,0} + }, { // 3 + {0,0,2,3}, + {0,1,2,2}, + {0,2,6,1}, + {1,0,3,1}, + {1,1,2,1}, + {1,2,5,1}, + {2,0,5,3}, + {2,0,5,2}, + {2,2,6,0} + }, { // 4 + // UNUSED + }, { // 5 + {0,0,1,1}, + {0,1,3,2}, + {0,2,6,6}, + {0,3,7,5}, + {1,0,3,3}, + {1,1,3,1}, + {1,2,6,4}, + {1,3,7,4}, + {2,0,6,7}, + {2,1,6,5}, + {2,2,7,7}, + {2,3,8,1}, + {3,0,7,6}, + {3,1,6,1}, + {3,2,7,1}, + {3,3,8,0} + }, { // 6 + {0,0,3,7}, + {0,1,3,3}, + {0,2,5,5}, + {0,3,7,1}, + {1,0,3,6}, + {1,1,2,2}, + {1,2,4,3}, + {1,3,5,2}, + {2,0,4,5}, + {2,1,4,4}, + {2,2,5,4}, + {2,3,6,1}, + {3,0,6,3}, + {3,1,5,3}, + {3,2,6,2}, + {3,3,7,0} + }, { // 7 + {0,0,1,1}, + {0,1,3,2}, + {0,2,6,10}, + {0,3,8,19}, + {0,4,8,16}, + {0,5,9,10}, + {1,0,3,3}, + {1,1,4,3}, + {1,2,6,7}, + {1,3,7,10}, + {1,4,7,5}, + {1,5,8,3}, + {2,0,6,11}, + {2,1,5,4}, + {2,2,7,13}, + {2,3,8,17}, + {2,4,8,8}, + {2,5,9,4}, + {3,0,7,12}, + {3,1,7,11}, + {3,2,8,18}, + {3,3,9,15}, + {3,4,9,11}, + {3,5,9,2}, + {4,0,7,7}, + {4,1,7,6}, + {4,2,8,9}, + {4,3,9,14}, + {4,4,9,3}, + {4,5,10,1}, + {5,0,8,6}, + {5,1,8,4}, + {5,2,9,5}, + {5,3,10,3}, + {5,4,10,2}, + {5,5,10,0}, + }, { // 8 + {0,0,2,3}, + {0,1,3,4}, + {0,2,6,6}, + {0,3,8,18}, + {0,4,8,12}, + {0,5,9,5}, + {1,0,3,5}, + {1,1,2,1}, + {1,2,4,2}, + {1,3,8,16}, + {1,4,8,9}, + {1,5,8,3}, + {2,0,6,7}, + {2,1,4,3}, + {2,2,6,5}, + {2,3,8,14}, + {2,4,8,7}, + {2,5,9,3}, + {3,0,8,19}, + {3,1,8,17}, + {3,2,8,15}, + {3,3,9,13}, + {3,4,9,10}, + {3,5,10,4}, + {4,0,8,13}, + {4,1,7,5}, + {4,2,8,8}, + {4,3,9,11}, + {4,4,10,5}, + {4,5,10,1}, + {5,0,9,12}, + {5,1,8,4}, + {5,2,9,4}, + {5,3,9,1}, + {5,4,11,1}, + {5,5,11,0}, + }, { // 9 + {0,0,3,7}, + {0,1,3,5}, + {0,2,5,9}, + {0,3,6,14}, + {0,4,8,15}, + {0,5,9,7}, + {1,0,3,6}, + {1,1,3,4}, + {1,2,4,5}, + {1,3,5,5}, + {1,4,6,6}, + {1,5,8,7}, + {2,0,4,7}, + {2,1,4,6}, + {2,2,5,8}, + {2,3,6,8}, + {2,4,7,8}, + {2,5,8,5}, + {3,0,6,15}, + {3,1,5,6}, + {3,2,6,9}, + {3,3,7,10}, + {3,4,7,5}, + {3,5,8,1}, + {4,0,7,11}, + {4,1,6,7}, + {4,2,7,9}, + {4,3,7,6}, + {4,4,8,4}, + {4,5,9,1}, + {5,0,8,14}, + {5,1,7,4}, + {5,2,8,6}, + {5,3,8,2}, + {5,4,9,6}, + {5,5,9,0}, + }, { // 10 + {0,0,1,1}, + {0,1,3,2}, + {0,2,6,10}, + {0,3,8,23}, + {0,4,9,35}, + {0,5,9,30}, + {0,6,9,12}, + {0,7,10,17}, + {1,0,3,3}, + {1,1,4,3}, + {1,2,6,8}, + {1,3,7,12}, + {1,4,8,18}, + {1,5,9,21}, + {1,6,8,12}, + {1,7,8,7}, + {2,0,6,11}, + {2,1,6,9}, + {2,2,7,15}, + {2,3,8,21}, + {2,4,9,32}, + {2,5,10,40}, + {2,6,9,19}, + {2,7,9,6}, + {3,0,7,14}, + {3,1,7,13}, + {3,2,8,22}, + {3,3,9,34}, + {3,4,10,46}, + {3,5,10,23}, + {3,6,9,18}, + {3,7,10,7}, + {4,0,8,20}, + {4,1,8,19}, + {4,2,9,33}, + {4,3,10,47}, + {4,4,10,27}, + {4,5,10,22}, + {4,6,10,9}, + {4,7,10,3}, + {5,0,9,31}, + {5,1,9,22}, + {5,2,10,41}, + {5,3,10,26}, + {5,4,11,21}, + {5,5,11,20}, + {5,6,10,5}, + {5,7,11,3}, + {6,0,8,14}, + {6,1,8,13}, + {6,2,9,10}, + {6,3,10,11}, + {6,4,10,16}, + {6,5,10,6}, + {6,6,11,5}, + {6,7,11,1}, + {7,0,9,9}, + {7,1,8,8}, + {7,2,9,7}, + {7,3,10,8}, + {7,4,10,4}, + {7,5,11,4}, + {7,6,11,2}, + {7,7,11,0}, + }, { // 11 + {0,0,2,3}, + {0,1,3,4}, + {0,2,5,10}, + {0,3,7,24}, + {0,4,8,34}, + {0,5,9,33}, + {0,6,8,21}, + {0,7,9,15}, + {1,0,3,5}, + {1,1,3,3}, + {1,2,4,4}, + {1,3,6,10}, + {1,4,8,32}, + {1,5,8,17}, + {1,6,7,11}, + {1,7,8,10}, + {2,0,5,11}, + {2,1,5,7}, + {2,2,6,13}, + {2,3,7,18}, + {2,4,8,30}, + {2,5,9,31}, + {2,6,8,20}, + {2,7,8,5}, + {3,0,7,25}, + {3,1,6,11}, + {3,2,7,19}, + {3,3,9,59}, + {3,4,8,27}, + {3,5,10,18}, + {3,6,8,12}, + {3,7,9,5}, + {4,0,8,35}, + {4,1,8,33}, + {4,2,8,31}, + {4,3,9,58}, + {4,4,9,30}, + {4,5,10,16}, + {4,6,9,7}, + {4,7,10,5}, + {5,0,8,28}, + {5,1,8,26}, + {5,2,9,32}, + {5,3,10,19}, + {5,4,10,17}, + {5,5,11,15}, + {5,6,10,8}, + {5,7,11,14}, + {6,0,8,14}, + {6,1,7,12}, + {6,2,7,9}, + {6,3,8,13}, + {6,4,9,14}, + {6,5,10,9}, + {6,6,10,4}, + {6,7,10,1}, + {7,0,8,11}, + {7,1,7,4}, + {7,2,8,6}, + {7,3,9,6}, + {7,4,10,6}, + {7,5,10,3}, + {7,6,10,2}, + {7,7,10,0}, + }, { // 12 + {0,0,4,9}, + {0,1,3,6}, + {0,2,5,16}, + {0,3,7,33}, + {0,4,8,41}, + {0,5,9,39}, + {0,6,9,38}, + {0,7,9,26}, + {1,0,3,7}, + {1,1,3,5}, + {1,2,4,6}, + {1,3,5,9}, + {1,4,7,23}, + {1,5,7,16}, + {1,6,8,26}, + {1,7,8,11}, + {2,0,5,17}, + {2,1,4,7}, + {2,2,5,11}, + {2,3,6,14}, + {2,4,7,21}, + {2,5,8,30}, + {2,6,7,10}, + {2,7,8,7}, + {3,0,6,17}, + {3,1,5,10}, + {3,2,6,15}, + {3,3,6,12}, + {3,4,7,18}, + {3,5,8,28}, + {3,6,8,14}, + {3,7,8,5}, + {4,0,7,32}, + {4,1,6,13}, + {4,2,7,22}, + {4,3,7,19}, + {4,4,8,18}, + {4,5,8,16}, + {4,6,8,9}, + {4,7,9,5}, + {5,0,8,40}, + {5,1,7,17}, + {5,2,8,31}, + {5,3,8,29}, + {5,4,8,17}, + {5,5,9,13}, + {5,6,8,4}, + {5,7,9,2}, + {6,0,8,27}, + {6,1,7,12}, + {6,2,7,11}, + {6,3,8,15}, + {6,4,8,10}, + {6,5,9,7}, + {6,6,9,4}, + {6,7,10,1}, + {7,0,9,27}, + {7,1,8,12}, + {7,2,8,8}, + {7,3,9,12}, + {7,4,9,6}, + {7,5,9,3}, + {7,6,9,1}, + {7,7,10,0}, + }, { // 13 + {0,0,1,1}, + {0,1,4,5}, + {0,2,6,14}, + {0,3,7,21}, + {0,4,8,34}, + {0,5,9,51}, + {0,6,9,46}, + {0,7,10,71}, + {0,8,9,42}, + {0,9,10,52}, + {0,10,11,68}, + {0,11,11,52}, + {0,12,12,67}, + {0,13,12,44}, + {0,14,13,43}, + {0,15,13,19}, + {1,0,3,3}, + {1,1,4,4}, + {1,2,6,12}, + {1,3,7,19}, + {1,4,8,31}, + {1,5,8,26}, + {1,6,9,44}, + {1,7,9,33}, + {1,8,9,31}, + {1,9,9,24}, + {1,10,10,32}, + {1,11,10,24}, + {1,12,11,31}, + {1,13,12,35}, + {1,14,12,22}, + {1,15,12,14}, + {2,0,6,15}, + {2,1,6,13}, + {2,2,7,23}, + {2,3,8,36}, + {2,4,9,59}, + {2,5,9,49}, + {2,6,10,77}, + {2,7,10,65}, + {2,8,9,29}, + {2,9,10,40}, + {2,10,10,30}, + {2,11,11,40}, + {2,12,11,27}, + {2,13,12,33}, + {2,14,13,42}, + {2,15,13,16}, + {3,0,7,22}, + {3,1,7,20}, + {3,2,8,37}, + {3,3,9,61}, + {3,4,9,56}, + {3,5,10,79}, + {3,6,10,73}, + {3,7,10,64}, + {3,8,10,43}, + {3,9,11,76}, + {3,10,11,56}, + {3,11,11,37}, + {3,12,11,26}, + {3,13,12,31}, + {3,14,13,25}, + {3,15,13,14}, + {4,0,8,35}, + {4,1,7,16}, + {4,2,9,60}, + {4,3,9,57}, + {4,4,10,97}, + {4,5,10,75}, + {4,6,11,114}, + {4,7,11,91}, + {4,8,10,54}, + {4,9,11,73}, + {4,10,11,55}, + {4,11,12,41}, + {4,12,12,48}, + {4,13,13,53}, + {4,14,13,23}, + {4,15,14,24}, + {5,0,9,58}, + {5,1,8,27}, + {5,2,9,50}, + {5,3,10,96}, + {5,4,10,76}, + {5,5,10,70}, + {5,6,11,93}, + {5,7,11,84}, + {5,8,11,77}, + {5,9,11,58}, + {5,10,12,79}, + {5,11,11,29}, + {5,12,13,74}, + {5,13,13,49}, + {5,14,14,41}, + {5,15,14,17}, + {6,0,9,47}, + {6,1,9,45}, + {6,2,10,78}, + {6,3,10,74}, + {6,4,11,115}, + {6,5,11,94}, + {6,6,11,90}, + {6,7,11,79}, + {6,8,11,69}, + {6,9,12,83}, + {6,10,12,71}, + {6,11,12,50}, + {6,12,13,59}, + {6,13,13,38}, + {6,14,14,36}, + {6,15,14,15}, + {7,0,10,72}, + {7,1,9,34}, + {7,2,10,56}, + {7,3,11,95}, + {7,4,11,92}, + {7,5,11,85}, + {7,6,12,91}, + {7,7,12,90}, + {7,8,12,86}, + {7,9,12,73}, + {7,10,13,77}, + {7,11,13,65}, + {7,12,13,51}, + {7,13,14,44}, + {7,14,16,43}, + {7,15,16,42}, + {8,0,9,43}, + {8,1,8,20}, + {8,2,9,30}, + {8,3,10,44}, + {8,4,10,55}, + {8,5,11,78}, + {8,6,11,72}, + {8,7,12,87}, + {8,8,12,78}, + {8,9,12,61}, + {8,10,12,46}, + {8,11,13,54}, + {8,12,13,37}, + {8,13,14,30}, + {8,14,15,20}, + {8,15,15,16}, + {9,0,10,53}, + {9,1,9,25}, + {9,2,10,41}, + {9,3,10,37}, + {9,4,11,44}, + {9,5,11,59}, + {9,6,11,54}, + {9,7,13,81}, + {9,8,12,66}, + {9,9,13,76}, + {9,10,13,57}, + {9,11,14,54}, + {9,12,14,37}, + {9,13,14,18}, + {9,14,16,39}, + {9,15,15,11}, + {10,0,10,35}, + {10,1,10,33}, + {10,2,10,31}, + {10,3,11,57}, + {10,4,11,42}, + {10,5,12,82}, + {10,6,12,72}, + {10,7,13,80}, + {10,8,12,47}, + {10,9,13,58}, + {10,10,14,55}, + {10,11,13,21}, + {10,12,14,22}, + {10,13,15,26}, + {10,14,16,38}, + {10,15,17,22}, + {11,0,11,53}, + {11,1,10,25}, + {11,2,10,23}, + {11,3,11,38}, + {11,4,12,70}, + {11,5,12,60}, + {11,6,12,51}, + {11,7,12,36}, + {11,8,13,55}, + {11,9,13,26}, + {11,10,13,34}, + {11,11,14,23}, + {11,12,15,27}, + {11,13,15,14}, + {11,14,15,9}, + {11,15,16,7}, + {12,0,11,34}, + {12,1,11,32}, + {12,2,11,28}, + {12,3,12,39}, + {12,4,12,49}, + {12,5,13,75}, + {12,6,12,30}, + {12,7,13,52}, + {12,8,14,48}, + {12,9,14,40}, + {12,10,15,52}, + {12,11,15,28}, + {12,12,15,18}, + {12,13,16,17}, + {12,14,16,9}, + {12,15,16,5}, + {13,0,12,45}, + {13,1,11,21}, + {13,2,12,34}, + {13,3,13,64}, + {13,4,13,56}, + {13,5,13,50}, + {13,6,14,49}, + {13,7,14,45}, + {13,8,14,31}, + {13,9,14,19}, + {13,10,14,12}, + {13,11,15,15}, + {13,12,16,10}, + {13,13,15,7}, + {13,14,16,6}, + {13,15,16,3}, + {14,0,13,48}, + {14,1,12,23}, + {14,2,12,20}, + {14,3,13,39}, + {14,4,13,36}, + {14,5,13,35}, + {14,6,15,53}, + {14,7,14,21}, + {14,8,14,16}, + {14,9,17,23}, + {14,10,15,13}, + {14,11,15,10}, + {14,12,15,6}, + {14,13,17,1}, + {14,14,16,4}, + {14,15,16,2}, + {15,0,12,16}, + {15,1,12,15}, + {15,2,13,17}, + {15,3,14,27}, + {15,4,14,25}, + {15,5,14,20}, + {15,6,15,29}, + {15,7,14,11}, + {15,8,15,17}, + {15,9,15,12}, + {15,10,16,16}, + {15,11,16,8}, + {15,12,19,1}, + {15,13,18,1}, + {15,14,19,0}, + {15,15,16,1}, + }, { // 14 + // UNUSED + }, { // 15 + {0,0,3,7}, + {0,1,4,12}, + {0,2,5,18}, + {0,3,7,53}, + {0,4,7,47}, + {0,5,8,76}, + {0,6,9,124}, + {0,7,9,108}, + {0,8,9,89}, + {0,9,10,123}, + {0,10,10,108}, + {0,11,11,119}, + {0,12,11,107}, + {0,13,11,81}, + {0,14,12,122}, + {0,15,13,63}, + {1,0,4,13}, + {1,1,3,5}, + {1,2,5,16}, + {1,3,6,27}, + {1,4,7,46}, + {1,5,7,36}, + {1,6,8,61}, + {1,7,8,51}, + {1,8,8,42}, + {1,9,9,70}, + {1,10,9,52}, + {1,11,10,83}, + {1,12,10,65}, + {1,13,10,41}, + {1,14,11,59}, + {1,15,11,36}, + {2,0,5,19}, + {2,1,5,17}, + {2,2,5,15}, + {2,3,6,24}, + {2,4,7,41}, + {2,5,7,34}, + {2,6,8,59}, + {2,7,8,48}, + {2,8,8,40}, + {2,9,9,64}, + {2,10,9,50}, + {2,11,10,78}, + {2,12,10,62}, + {2,13,11,80}, + {2,14,11,56}, + {2,15,11,33}, + {3,0,6,29}, + {3,1,6,28}, + {3,2,6,25}, + {3,3,7,43}, + {3,4,7,39}, + {3,5,8,63}, + {3,6,8,55}, + {3,7,9,93}, + {3,8,9,76}, + {3,9,9,59}, + {3,10,10,93}, + {3,11,10,72}, + {3,12,10,54}, + {3,13,11,75}, + {3,14,11,50}, + {3,15,11,29}, + {4,0,7,52}, + {4,1,6,22}, + {4,2,7,42}, + {4,3,7,40}, + {4,4,8,67}, + {4,5,8,57}, + {4,6,9,95}, + {4,7,9,79}, + {4,8,9,72}, + {4,9,9,57}, + {4,10,10,89}, + {4,11,10,69}, + {4,12,10,49}, + {4,13,11,66}, + {4,14,11,46}, + {4,15,11,27}, + {5,0,8,77}, + {5,1,7,37}, + {5,2,7,35}, + {5,3,8,66}, + {5,4,8,58}, + {5,5,8,52}, + {5,6,9,91}, + {5,7,9,74}, + {5,8,9,62}, + {5,9,9,48}, + {5,10,10,79}, + {5,11,10,63}, + {5,12,11,90}, + {5,13,11,62}, + {5,14,11,40}, + {5,15,12,38}, + {6,0,9,125}, + {6,1,7,32}, + {6,2,8,60}, + {6,3,8,56}, + {6,4,8,50}, + {6,5,9,92}, + {6,6,9,78}, + {6,7,9,65}, + {6,8,9,55}, + {6,9,10,87}, + {6,10,10,71}, + {6,11,10,51}, + {6,12,11,73}, + {6,13,11,51}, + {6,14,12,70}, + {6,15,12,30}, + {7,0,9,109}, + {7,1,8,53}, + {7,2,8,49}, + {7,3,9,94}, + {7,4,9,88}, + {7,5,9,75}, + {7,6,9,66}, + {7,7,10,122}, + {7,8,10,91}, + {7,9,10,73}, + {7,10,10,56}, + {7,11,10,42}, + {7,12,11,64}, + {7,13,11,44}, + {7,14,11,21}, + {7,15,12,25}, + {8,0,9,90}, + {8,1,8,43}, + {8,2,8,41}, + {8,3,9,77}, + {8,4,9,73}, + {8,5,9,63}, + {8,6,9,56}, + {8,7,10,92}, + {8,8,10,77}, + {8,9,10,66}, + {8,10,10,47}, + {8,11,11,67}, + {8,12,11,48}, + {8,13,12,53}, + {8,14,12,36}, + {8,15,12,20}, + {9,0,9,71}, + {9,1,8,34}, + {9,2,9,67}, + {9,3,9,60}, + {9,4,9,58}, + {9,5,9,49}, + {9,6,10,88}, + {9,7,10,76}, + {9,8,10,67}, + {9,9,11,106}, + {9,10,11,71}, + {9,11,11,54}, + {9,12,11,38}, + {9,13,12,39}, + {9,14,12,23}, + {9,15,12,15}, + {10,0,10,109}, + {10,1,9,53}, + {10,2,9,51}, + {10,3,9,47}, + {10,4,10,90}, + {10,5,10,82}, + {10,6,10,58}, + {10,7,10,57}, + {10,8,10,48}, + {10,9,11,72}, + {10,10,11,57}, + {10,11,11,41}, + {10,12,11,23}, + {10,13,12,27}, + {10,14,13,62}, + {10,15,12,9}, + {11,0,10,86}, + {11,1,9,42}, + {11,2,9,40}, + {11,3,9,37}, + {11,4,10,70}, + {11,5,10,64}, + {11,6,10,52}, + {11,7,10,43}, + {11,8,11,70}, + {11,9,11,55}, + {11,10,11,42}, + {11,11,11,25}, + {11,12,12,29}, + {11,13,12,18}, + {11,14,12,11}, + {11,15,13,11}, + {12,0,11,118}, + {12,1,10,68}, + {12,2,9,30}, + {12,3,10,55}, + {12,4,10,50}, + {12,5,10,46}, + {12,6,11,74}, + {12,7,11,65}, + {12,8,11,49}, + {12,9,11,39}, + {12,10,11,24}, + {12,11,11,16}, + {12,12,12,22}, + {12,13,12,13}, + {12,14,13,14}, + {12,15,13,7}, + {13,0,11,91}, + {13,1,10,44}, + {13,2,10,39}, + {13,3,10,38}, + {13,4,10,34}, + {13,5,11,63}, + {13,6,11,52}, + {13,7,11,45}, + {13,8,11,31}, + {13,9,12,52}, + {13,10,12,28}, + {13,11,12,19}, + {13,12,12,14}, + {13,13,12,8}, + {13,14,13,9}, + {13,15,13,3}, + {14,0,12,123}, + {14,1,11,60}, + {14,2,11,58}, + {14,3,11,53}, + {14,4,11,47}, + {14,5,11,43}, + {14,6,11,32}, + {14,7,11,22}, + {14,8,12,37}, + {14,9,12,24}, + {14,10,12,17}, + {14,11,12,12}, + {14,12,13,15}, + {14,13,13,10}, + {14,14,12,2}, + {14,15,13,1}, + {15,0,12,71}, + {15,1,11,37}, + {15,2,11,34}, + {15,3,11,30}, + {15,4,11,28}, + {15,5,11,20}, + {15,6,11,17}, + {15,7,12,26}, + {15,8,12,21}, + {15,9,12,16}, + {15,10,12,10}, + {15,11,12,6}, + {15,12,13,8}, + {15,13,13,6}, + {15,14,13,2}, + {15,15,13,0}, + }, { // 16 + {0,0,1,1}, + {0,1,4,5}, + {0,2,6,14}, + {0,3,8,44}, + {0,4,9,74}, + {0,5,9,63}, + {0,6,10,110}, + {0,7,10,93}, + {0,8,11,172}, + {0,9,11,149}, + {0,10,11,138}, + {0,11,12,242}, + {0,12,12,225}, + {0,13,12,195}, + {0,14,13,376}, + {0,15,9,17}, + {1,0,3,3}, + {1,1,4,4}, + {1,2,6,12}, + {1,3,7,20}, + {1,4,8,35}, + {1,5,9,62}, + {1,6,9,53}, + {1,7,9,47}, + {1,8,10,83}, + {1,9,10,75}, + {1,10,10,68}, + {1,11,11,119}, + {1,12,12,201}, + {1,13,11,107}, + {1,14,12,207}, + {1,15,8,9}, + {2,0,6,15}, + {2,1,6,13}, + {2,2,7,23}, + {2,3,8,38}, + {2,4,9,67}, + {2,5,9,58}, + {2,6,10,103}, + {2,7,10,90}, + {2,8,11,161}, + {2,9,10,72}, + {2,10,11,127}, + {2,11,11,117}, + {2,12,11,110}, + {2,13,12,209}, + {2,14,12,206}, + {2,15,9,16}, + {3,0,8,45}, + {3,1,7,21}, + {3,2,8,39}, + {3,3,9,69}, + {3,4,9,64}, + {3,5,10,114}, + {3,6,10,99}, + {3,7,10,87}, + {3,8,11,158}, + {3,9,11,140}, + {3,10,12,252}, + {3,11,12,212}, + {3,12,12,199}, + {3,13,13,387}, + {3,14,13,365}, + {3,15,10,26}, + {4,0,9,75}, + {4,1,8,36}, + {4,2,9,68}, + {4,3,9,65}, + {4,4,10,115}, + {4,5,10,101}, + {4,6,11,179}, + {4,7,11,164}, + {4,8,11,155}, + {4,9,12,264}, + {4,10,12,246}, + {4,11,12,226}, + {4,12,13,395}, + {4,13,13,382}, + {4,14,13,362}, + {4,15,9,9}, + {5,0,9,66}, + {5,1,8,30}, + {5,2,9,59}, + {5,3,9,56}, + {5,4,10,102}, + {5,5,11,185}, + {5,6,11,173}, + {5,7,12,265}, + {5,8,11,142}, + {5,9,12,253}, + {5,10,12,232}, + {5,11,13,400}, + {5,12,13,388}, + {5,13,13,378}, + {5,14,14,445}, + {5,15,10,16}, + {6,0,10,111}, + {6,1,9,54}, + {6,2,9,52}, + {6,3,10,100}, + {6,4,11,184}, + {6,5,11,178}, + {6,6,11,160}, + {6,7,11,133}, + {6,8,12,257}, + {6,9,12,244}, + {6,10,12,228}, + {6,11,12,217}, + {6,12,13,385}, + {6,13,13,366}, + {6,14,14,715}, + {6,15,10,10}, + {7,0,10,98}, + {7,1,9,48}, + {7,2,10,91}, + {7,3,10,88}, + {7,4,11,165}, + {7,5,11,157}, + {7,6,11,148}, + {7,7,12,261}, + {7,8,12,248}, + {7,9,13,407}, + {7,10,13,397}, + {7,11,13,372}, + {7,12,13,380}, + {7,13,15,889}, + {7,14,15,884}, + {7,15,10,8}, + {8,0,10,85}, + {8,1,10,84}, + {8,2,10,81}, + {8,3,11,159}, + {8,4,11,156}, + {8,5,11,143}, + {8,6,12,260}, + {8,7,12,249}, + {8,8,13,427}, + {8,9,13,401}, + {8,10,13,392}, + {8,11,13,383}, + {8,12,14,727}, + {8,13,14,713}, + {8,14,14,708}, + {8,15,10,7}, + {9,0,11,154}, + {9,1,10,76}, + {9,2,10,73}, + {9,3,11,141}, + {9,4,11,131}, + {9,5,12,256}, + {9,6,12,245}, + {9,7,13,426}, + {9,8,13,406}, + {9,9,13,394}, + {9,10,13,384}, + {9,11,14,735}, + {9,12,13,359}, + {9,13,14,710}, + {9,14,13,352}, + {9,15,11,11}, + {10,0,11,139}, + {10,1,11,129}, + {10,2,10,67}, + {10,3,11,125}, + {10,4,12,247}, + {10,5,12,233}, + {10,6,12,229}, + {10,7,12,219}, + {10,8,13,393}, + {10,9,14,743}, + {10,10,14,737}, + {10,11,14,720}, + {10,12,15,885}, + {10,13,15,882}, + {10,14,14,439}, + {10,15,10,4}, + {11,0,12,243}, + {11,1,11,120}, + {11,2,11,118}, + {11,3,11,115}, + {11,4,12,227}, + {11,5,12,223}, + {11,6,13,396}, + {11,7,14,746}, + {11,8,14,742}, + {11,9,14,736}, + {11,10,14,721}, + {11,11,14,712}, + {11,12,14,706}, + {11,13,13,223}, + {11,14,14,436}, + {11,15,11,6}, + {12,0,12,202}, + {12,1,12,224}, + {12,2,12,222}, + {12,3,12,218}, + {12,4,12,216}, + {12,5,13,389}, + {12,6,13,386}, + {12,7,13,381}, + {12,8,13,364}, + {12,9,15,888}, + {12,10,14,443}, + {12,11,14,707}, + {12,12,14,440}, + {12,13,14,437}, + {12,14,16,1728}, + {12,15,11,4}, + {13,0,14,747}, + {13,1,12,211}, + {13,2,12,210}, + {13,3,12,208}, + {13,4,13,370}, + {13,5,13,379}, + {13,6,14,734}, + {13,7,14,723}, + {13,8,14,714}, + {13,9,16,1735}, + {13,10,15,883}, + {13,11,15,877}, + {13,12,15,876}, + {13,13,17,3459}, + {13,14,15,865}, + {13,15,11,2}, + {14,0,13,377}, + {14,1,13,369}, + {14,2,11,102}, + {14,3,12,187}, + {14,4,14,726}, + {14,5,14,722}, + {14,6,13,358}, + {14,7,14,711}, + {14,8,14,709}, + {14,9,15,866}, + {14,10,16,1734}, + {14,11,15,871}, + {14,12,17,3458}, + {14,13,15,870}, + {14,14,14,434}, + {14,15,11,0}, + {15,0,9,12}, + {15,1,8,10}, + {15,2,8,7}, + {15,3,9,11}, + {15,4,9,10}, + {15,5,10,17}, + {15,6,10,11}, + {15,7,10,9}, + {15,8,11,13}, + {15,9,11,12}, + {15,10,11,10}, + {15,11,11,7}, + {15,12,11,5}, + {15,13,11,3}, + {15,14,11,1}, + {15,15,8,3}, + }, { // 17 + {0,0,1,1}, + {0,1,4,5}, + {0,2,6,14}, + {0,3,8,44}, + {0,4,9,74}, + {0,5,9,63}, + {0,6,10,110}, + {0,7,10,93}, + {0,8,11,172}, + {0,9,11,149}, + {0,10,11,138}, + {0,11,12,242}, + {0,12,12,225}, + {0,13,12,195}, + {0,14,13,376}, + {0,15,9,17}, + {1,0,3,3}, + {1,1,4,4}, + {1,2,6,12}, + {1,3,7,20}, + {1,4,8,35}, + {1,5,9,62}, + {1,6,9,53}, + {1,7,9,47}, + {1,8,10,83}, + {1,9,10,75}, + {1,10,10,68}, + {1,11,11,119}, + {1,12,12,201}, + {1,13,11,107}, + {1,14,12,207}, + {1,15,8,9}, + {2,0,6,15}, + {2,1,6,13}, + {2,2,7,23}, + {2,3,8,38}, + {2,4,9,67}, + {2,5,9,58}, + {2,6,10,103}, + {2,7,10,90}, + {2,8,11,161}, + {2,9,10,72}, + {2,10,11,127}, + {2,11,11,117}, + {2,12,11,110}, + {2,13,12,209}, + {2,14,12,206}, + {2,15,9,16}, + {3,0,8,45}, + {3,1,7,21}, + {3,2,8,39}, + {3,3,9,69}, + {3,4,9,64}, + {3,5,10,114}, + {3,6,10,99}, + {3,7,10,87}, + {3,8,11,158}, + {3,9,11,140}, + {3,10,12,252}, + {3,11,12,212}, + {3,12,12,199}, + {3,13,13,387}, + {3,14,13,365}, + {3,15,10,26}, + {4,0,9,75}, + {4,1,8,36}, + {4,2,9,68}, + {4,3,9,65}, + {4,4,10,115}, + {4,5,10,101}, + {4,6,11,179}, + {4,7,11,164}, + {4,8,11,155}, + {4,9,12,264}, + {4,10,12,246}, + {4,11,12,226}, + {4,12,13,395}, + {4,13,13,382}, + {4,14,13,362}, + {4,15,9,9}, + {5,0,9,66}, + {5,1,8,30}, + {5,2,9,59}, + {5,3,9,56}, + {5,4,10,102}, + {5,5,11,185}, + {5,6,11,173}, + {5,7,12,265}, + {5,8,11,142}, + {5,9,12,253}, + {5,10,12,232}, + {5,11,13,400}, + {5,12,13,388}, + {5,13,13,378}, + {5,14,14,445}, + {5,15,10,16}, + {6,0,10,111}, + {6,1,9,54}, + {6,2,9,52}, + {6,3,10,100}, + {6,4,11,184}, + {6,5,11,178}, + {6,6,11,160}, + {6,7,11,133}, + {6,8,12,257}, + {6,9,12,244}, + {6,10,12,228}, + {6,11,12,217}, + {6,12,13,385}, + {6,13,13,366}, + {6,14,14,715}, + {6,15,10,10}, + {7,0,10,98}, + {7,1,9,48}, + {7,2,10,91}, + {7,3,10,88}, + {7,4,11,165}, + {7,5,11,157}, + {7,6,11,148}, + {7,7,12,261}, + {7,8,12,248}, + {7,9,13,407}, + {7,10,13,397}, + {7,11,13,372}, + {7,12,13,380}, + {7,13,15,889}, + {7,14,15,884}, + {7,15,10,8}, + {8,0,10,85}, + {8,1,10,84}, + {8,2,10,81}, + {8,3,11,159}, + {8,4,11,156}, + {8,5,11,143}, + {8,6,12,260}, + {8,7,12,249}, + {8,8,13,427}, + {8,9,13,401}, + {8,10,13,392}, + {8,11,13,383}, + {8,12,14,727}, + {8,13,14,713}, + {8,14,14,708}, + {8,15,10,7}, + {9,0,11,154}, + {9,1,10,76}, + {9,2,10,73}, + {9,3,11,141}, + {9,4,11,131}, + {9,5,12,256}, + {9,6,12,245}, + {9,7,13,426}, + {9,8,13,406}, + {9,9,13,394}, + {9,10,13,384}, + {9,11,14,735}, + {9,12,13,359}, + {9,13,14,710}, + {9,14,13,352}, + {9,15,11,11}, + {10,0,11,139}, + {10,1,11,129}, + {10,2,10,67}, + {10,3,11,125}, + {10,4,12,247}, + {10,5,12,233}, + {10,6,12,229}, + {10,7,12,219}, + {10,8,13,393}, + {10,9,14,743}, + {10,10,14,737}, + {10,11,14,720}, + {10,12,15,885}, + {10,13,15,882}, + {10,14,14,439}, + {10,15,10,4}, + {11,0,12,243}, + {11,1,11,120}, + {11,2,11,118}, + {11,3,11,115}, + {11,4,12,227}, + {11,5,12,223}, + {11,6,13,396}, + {11,7,14,746}, + {11,8,14,742}, + {11,9,14,736}, + {11,10,14,721}, + {11,11,14,712}, + {11,12,14,706}, + {11,13,13,223}, + {11,14,14,436}, + {11,15,11,6}, + {12,0,12,202}, + {12,1,12,224}, + {12,2,12,222}, + {12,3,12,218}, + {12,4,12,216}, + {12,5,13,389}, + {12,6,13,386}, + {12,7,13,381}, + {12,8,13,364}, + {12,9,15,888}, + {12,10,14,443}, + {12,11,14,707}, + {12,12,14,440}, + {12,13,14,437}, + {12,14,16,1728}, + {12,15,11,4}, + {13,0,14,747}, + {13,1,12,211}, + {13,2,12,210}, + {13,3,12,208}, + {13,4,13,370}, + {13,5,13,379}, + {13,6,14,734}, + {13,7,14,723}, + {13,8,14,714}, + {13,9,16,1735}, + {13,10,15,883}, + {13,11,15,877}, + {13,12,15,876}, + {13,13,17,3459}, + {13,14,15,865}, + {13,15,11,2}, + {14,0,13,377}, + {14,1,13,369}, + {14,2,11,102}, + {14,3,12,187}, + {14,4,14,726}, + {14,5,14,722}, + {14,6,13,358}, + {14,7,14,711}, + {14,8,14,709}, + {14,9,15,866}, + {14,10,16,1734}, + {14,11,15,871}, + {14,12,17,3458}, + {14,13,15,870}, + {14,14,14,434}, + {14,15,11,0}, + {15,0,9,12}, + {15,1,8,10}, + {15,2,8,7}, + {15,3,9,11}, + {15,4,9,10}, + {15,5,10,17}, + {15,6,10,11}, + {15,7,10,9}, + {15,8,11,13}, + {15,9,11,12}, + {15,10,11,10}, + {15,11,11,7}, + {15,12,11,5}, + {15,13,11,3}, + {15,14,11,1}, + {15,15,8,3}, + }, { // 18 + {0,0,1,1}, + {0,1,4,5}, + {0,2,6,14}, + {0,3,8,44}, + {0,4,9,74}, + {0,5,9,63}, + {0,6,10,110}, + {0,7,10,93}, + {0,8,11,172}, + {0,9,11,149}, + {0,10,11,138}, + {0,11,12,242}, + {0,12,12,225}, + {0,13,12,195}, + {0,14,13,376}, + {0,15,9,17}, + {1,0,3,3}, + {1,1,4,4}, + {1,2,6,12}, + {1,3,7,20}, + {1,4,8,35}, + {1,5,9,62}, + {1,6,9,53}, + {1,7,9,47}, + {1,8,10,83}, + {1,9,10,75}, + {1,10,10,68}, + {1,11,11,119}, + {1,12,12,201}, + {1,13,11,107}, + {1,14,12,207}, + {1,15,8,9}, + {2,0,6,15}, + {2,1,6,13}, + {2,2,7,23}, + {2,3,8,38}, + {2,4,9,67}, + {2,5,9,58}, + {2,6,10,103}, + {2,7,10,90}, + {2,8,11,161}, + {2,9,10,72}, + {2,10,11,127}, + {2,11,11,117}, + {2,12,11,110}, + {2,13,12,209}, + {2,14,12,206}, + {2,15,9,16}, + {3,0,8,45}, + {3,1,7,21}, + {3,2,8,39}, + {3,3,9,69}, + {3,4,9,64}, + {3,5,10,114}, + {3,6,10,99}, + {3,7,10,87}, + {3,8,11,158}, + {3,9,11,140}, + {3,10,12,252}, + {3,11,12,212}, + {3,12,12,199}, + {3,13,13,387}, + {3,14,13,365}, + {3,15,10,26}, + {4,0,9,75}, + {4,1,8,36}, + {4,2,9,68}, + {4,3,9,65}, + {4,4,10,115}, + {4,5,10,101}, + {4,6,11,179}, + {4,7,11,164}, + {4,8,11,155}, + {4,9,12,264}, + {4,10,12,246}, + {4,11,12,226}, + {4,12,13,395}, + {4,13,13,382}, + {4,14,13,362}, + {4,15,9,9}, + {5,0,9,66}, + {5,1,8,30}, + {5,2,9,59}, + {5,3,9,56}, + {5,4,10,102}, + {5,5,11,185}, + {5,6,11,173}, + {5,7,12,265}, + {5,8,11,142}, + {5,9,12,253}, + {5,10,12,232}, + {5,11,13,400}, + {5,12,13,388}, + {5,13,13,378}, + {5,14,14,445}, + {5,15,10,16}, + {6,0,10,111}, + {6,1,9,54}, + {6,2,9,52}, + {6,3,10,100}, + {6,4,11,184}, + {6,5,11,178}, + {6,6,11,160}, + {6,7,11,133}, + {6,8,12,257}, + {6,9,12,244}, + {6,10,12,228}, + {6,11,12,217}, + {6,12,13,385}, + {6,13,13,366}, + {6,14,14,715}, + {6,15,10,10}, + {7,0,10,98}, + {7,1,9,48}, + {7,2,10,91}, + {7,3,10,88}, + {7,4,11,165}, + {7,5,11,157}, + {7,6,11,148}, + {7,7,12,261}, + {7,8,12,248}, + {7,9,13,407}, + {7,10,13,397}, + {7,11,13,372}, + {7,12,13,380}, + {7,13,15,889}, + {7,14,15,884}, + {7,15,10,8}, + {8,0,10,85}, + {8,1,10,84}, + {8,2,10,81}, + {8,3,11,159}, + {8,4,11,156}, + {8,5,11,143}, + {8,6,12,260}, + {8,7,12,249}, + {8,8,13,427}, + {8,9,13,401}, + {8,10,13,392}, + {8,11,13,383}, + {8,12,14,727}, + {8,13,14,713}, + {8,14,14,708}, + {8,15,10,7}, + {9,0,11,154}, + {9,1,10,76}, + {9,2,10,73}, + {9,3,11,141}, + {9,4,11,131}, + {9,5,12,256}, + {9,6,12,245}, + {9,7,13,426}, + {9,8,13,406}, + {9,9,13,394}, + {9,10,13,384}, + {9,11,14,735}, + {9,12,13,359}, + {9,13,14,710}, + {9,14,13,352}, + {9,15,11,11}, + {10,0,11,139}, + {10,1,11,129}, + {10,2,10,67}, + {10,3,11,125}, + {10,4,12,247}, + {10,5,12,233}, + {10,6,12,229}, + {10,7,12,219}, + {10,8,13,393}, + {10,9,14,743}, + {10,10,14,737}, + {10,11,14,720}, + {10,12,15,885}, + {10,13,15,882}, + {10,14,14,439}, + {10,15,10,4}, + {11,0,12,243}, + {11,1,11,120}, + {11,2,11,118}, + {11,3,11,115}, + {11,4,12,227}, + {11,5,12,223}, + {11,6,13,396}, + {11,7,14,746}, + {11,8,14,742}, + {11,9,14,736}, + {11,10,14,721}, + {11,11,14,712}, + {11,12,14,706}, + {11,13,13,223}, + {11,14,14,436}, + {11,15,11,6}, + {12,0,12,202}, + {12,1,12,224}, + {12,2,12,222}, + {12,3,12,218}, + {12,4,12,216}, + {12,5,13,389}, + {12,6,13,386}, + {12,7,13,381}, + {12,8,13,364}, + {12,9,15,888}, + {12,10,14,443}, + {12,11,14,707}, + {12,12,14,440}, + {12,13,14,437}, + {12,14,16,1728}, + {12,15,11,4}, + {13,0,14,747}, + {13,1,12,211}, + {13,2,12,210}, + {13,3,12,208}, + {13,4,13,370}, + {13,5,13,379}, + {13,6,14,734}, + {13,7,14,723}, + {13,8,14,714}, + {13,9,16,1735}, + {13,10,15,883}, + {13,11,15,877}, + {13,12,15,876}, + {13,13,17,3459}, + {13,14,15,865}, + {13,15,11,2}, + {14,0,13,377}, + {14,1,13,369}, + {14,2,11,102}, + {14,3,12,187}, + {14,4,14,726}, + {14,5,14,722}, + {14,6,13,358}, + {14,7,14,711}, + {14,8,14,709}, + {14,9,15,866}, + {14,10,16,1734}, + {14,11,15,871}, + {14,12,17,3458}, + {14,13,15,870}, + {14,14,14,434}, + {14,15,11,0}, + {15,0,9,12}, + {15,1,8,10}, + {15,2,8,7}, + {15,3,9,11}, + {15,4,9,10}, + {15,5,10,17}, + {15,6,10,11}, + {15,7,10,9}, + {15,8,11,13}, + {15,9,11,12}, + {15,10,11,10}, + {15,11,11,7}, + {15,12,11,5}, + {15,13,11,3}, + {15,14,11,1}, + {15,15,8,3}, + }, { // 19 + {0,0,1,1}, + {0,1,4,5}, + {0,2,6,14}, + {0,3,8,44}, + {0,4,9,74}, + {0,5,9,63}, + {0,6,10,110}, + {0,7,10,93}, + {0,8,11,172}, + {0,9,11,149}, + {0,10,11,138}, + {0,11,12,242}, + {0,12,12,225}, + {0,13,12,195}, + {0,14,13,376}, + {0,15,9,17}, + {1,0,3,3}, + {1,1,4,4}, + {1,2,6,12}, + {1,3,7,20}, + {1,4,8,35}, + {1,5,9,62}, + {1,6,9,53}, + {1,7,9,47}, + {1,8,10,83}, + {1,9,10,75}, + {1,10,10,68}, + {1,11,11,119}, + {1,12,12,201}, + {1,13,11,107}, + {1,14,12,207}, + {1,15,8,9}, + {2,0,6,15}, + {2,1,6,13}, + {2,2,7,23}, + {2,3,8,38}, + {2,4,9,67}, + {2,5,9,58}, + {2,6,10,103}, + {2,7,10,90}, + {2,8,11,161}, + {2,9,10,72}, + {2,10,11,127}, + {2,11,11,117}, + {2,12,11,110}, + {2,13,12,209}, + {2,14,12,206}, + {2,15,9,16}, + {3,0,8,45}, + {3,1,7,21}, + {3,2,8,39}, + {3,3,9,69}, + {3,4,9,64}, + {3,5,10,114}, + {3,6,10,99}, + {3,7,10,87}, + {3,8,11,158}, + {3,9,11,140}, + {3,10,12,252}, + {3,11,12,212}, + {3,12,12,199}, + {3,13,13,387}, + {3,14,13,365}, + {3,15,10,26}, + {4,0,9,75}, + {4,1,8,36}, + {4,2,9,68}, + {4,3,9,65}, + {4,4,10,115}, + {4,5,10,101}, + {4,6,11,179}, + {4,7,11,164}, + {4,8,11,155}, + {4,9,12,264}, + {4,10,12,246}, + {4,11,12,226}, + {4,12,13,395}, + {4,13,13,382}, + {4,14,13,362}, + {4,15,9,9}, + {5,0,9,66}, + {5,1,8,30}, + {5,2,9,59}, + {5,3,9,56}, + {5,4,10,102}, + {5,5,11,185}, + {5,6,11,173}, + {5,7,12,265}, + {5,8,11,142}, + {5,9,12,253}, + {5,10,12,232}, + {5,11,13,400}, + {5,12,13,388}, + {5,13,13,378}, + {5,14,14,445}, + {5,15,10,16}, + {6,0,10,111}, + {6,1,9,54}, + {6,2,9,52}, + {6,3,10,100}, + {6,4,11,184}, + {6,5,11,178}, + {6,6,11,160}, + {6,7,11,133}, + {6,8,12,257}, + {6,9,12,244}, + {6,10,12,228}, + {6,11,12,217}, + {6,12,13,385}, + {6,13,13,366}, + {6,14,14,715}, + {6,15,10,10}, + {7,0,10,98}, + {7,1,9,48}, + {7,2,10,91}, + {7,3,10,88}, + {7,4,11,165}, + {7,5,11,157}, + {7,6,11,148}, + {7,7,12,261}, + {7,8,12,248}, + {7,9,13,407}, + {7,10,13,397}, + {7,11,13,372}, + {7,12,13,380}, + {7,13,15,889}, + {7,14,15,884}, + {7,15,10,8}, + {8,0,10,85}, + {8,1,10,84}, + {8,2,10,81}, + {8,3,11,159}, + {8,4,11,156}, + {8,5,11,143}, + {8,6,12,260}, + {8,7,12,249}, + {8,8,13,427}, + {8,9,13,401}, + {8,10,13,392}, + {8,11,13,383}, + {8,12,14,727}, + {8,13,14,713}, + {8,14,14,708}, + {8,15,10,7}, + {9,0,11,154}, + {9,1,10,76}, + {9,2,10,73}, + {9,3,11,141}, + {9,4,11,131}, + {9,5,12,256}, + {9,6,12,245}, + {9,7,13,426}, + {9,8,13,406}, + {9,9,13,394}, + {9,10,13,384}, + {9,11,14,735}, + {9,12,13,359}, + {9,13,14,710}, + {9,14,13,352}, + {9,15,11,11}, + {10,0,11,139}, + {10,1,11,129}, + {10,2,10,67}, + {10,3,11,125}, + {10,4,12,247}, + {10,5,12,233}, + {10,6,12,229}, + {10,7,12,219}, + {10,8,13,393}, + {10,9,14,743}, + {10,10,14,737}, + {10,11,14,720}, + {10,12,15,885}, + {10,13,15,882}, + {10,14,14,439}, + {10,15,10,4}, + {11,0,12,243}, + {11,1,11,120}, + {11,2,11,118}, + {11,3,11,115}, + {11,4,12,227}, + {11,5,12,223}, + {11,6,13,396}, + {11,7,14,746}, + {11,8,14,742}, + {11,9,14,736}, + {11,10,14,721}, + {11,11,14,712}, + {11,12,14,706}, + {11,13,13,223}, + {11,14,14,436}, + {11,15,11,6}, + {12,0,12,202}, + {12,1,12,224}, + {12,2,12,222}, + {12,3,12,218}, + {12,4,12,216}, + {12,5,13,389}, + {12,6,13,386}, + {12,7,13,381}, + {12,8,13,364}, + {12,9,15,888}, + {12,10,14,443}, + {12,11,14,707}, + {12,12,14,440}, + {12,13,14,437}, + {12,14,16,1728}, + {12,15,11,4}, + {13,0,14,747}, + {13,1,12,211}, + {13,2,12,210}, + {13,3,12,208}, + {13,4,13,370}, + {13,5,13,379}, + {13,6,14,734}, + {13,7,14,723}, + {13,8,14,714}, + {13,9,16,1735}, + {13,10,15,883}, + {13,11,15,877}, + {13,12,15,876}, + {13,13,17,3459}, + {13,14,15,865}, + {13,15,11,2}, + {14,0,13,377}, + {14,1,13,369}, + {14,2,11,102}, + {14,3,12,187}, + {14,4,14,726}, + {14,5,14,722}, + {14,6,13,358}, + {14,7,14,711}, + {14,8,14,709}, + {14,9,15,866}, + {14,10,16,1734}, + {14,11,15,871}, + {14,12,17,3458}, + {14,13,15,870}, + {14,14,14,434}, + {14,15,11,0}, + {15,0,9,12}, + {15,1,8,10}, + {15,2,8,7}, + {15,3,9,11}, + {15,4,9,10}, + {15,5,10,17}, + {15,6,10,11}, + {15,7,10,9}, + {15,8,11,13}, + {15,9,11,12}, + {15,10,11,10}, + {15,11,11,7}, + {15,12,11,5}, + {15,13,11,3}, + {15,14,11,1}, + {15,15,8,3}, + }, { // 20 + {0,0,1,1}, + {0,1,4,5}, + {0,2,6,14}, + {0,3,8,44}, + {0,4,9,74}, + {0,5,9,63}, + {0,6,10,110}, + {0,7,10,93}, + {0,8,11,172}, + {0,9,11,149}, + {0,10,11,138}, + {0,11,12,242}, + {0,12,12,225}, + {0,13,12,195}, + {0,14,13,376}, + {0,15,9,17}, + {1,0,3,3}, + {1,1,4,4}, + {1,2,6,12}, + {1,3,7,20}, + {1,4,8,35}, + {1,5,9,62}, + {1,6,9,53}, + {1,7,9,47}, + {1,8,10,83}, + {1,9,10,75}, + {1,10,10,68}, + {1,11,11,119}, + {1,12,12,201}, + {1,13,11,107}, + {1,14,12,207}, + {1,15,8,9}, + {2,0,6,15}, + {2,1,6,13}, + {2,2,7,23}, + {2,3,8,38}, + {2,4,9,67}, + {2,5,9,58}, + {2,6,10,103}, + {2,7,10,90}, + {2,8,11,161}, + {2,9,10,72}, + {2,10,11,127}, + {2,11,11,117}, + {2,12,11,110}, + {2,13,12,209}, + {2,14,12,206}, + {2,15,9,16}, + {3,0,8,45}, + {3,1,7,21}, + {3,2,8,39}, + {3,3,9,69}, + {3,4,9,64}, + {3,5,10,114}, + {3,6,10,99}, + {3,7,10,87}, + {3,8,11,158}, + {3,9,11,140}, + {3,10,12,252}, + {3,11,12,212}, + {3,12,12,199}, + {3,13,13,387}, + {3,14,13,365}, + {3,15,10,26}, + {4,0,9,75}, + {4,1,8,36}, + {4,2,9,68}, + {4,3,9,65}, + {4,4,10,115}, + {4,5,10,101}, + {4,6,11,179}, + {4,7,11,164}, + {4,8,11,155}, + {4,9,12,264}, + {4,10,12,246}, + {4,11,12,226}, + {4,12,13,395}, + {4,13,13,382}, + {4,14,13,362}, + {4,15,9,9}, + {5,0,9,66}, + {5,1,8,30}, + {5,2,9,59}, + {5,3,9,56}, + {5,4,10,102}, + {5,5,11,185}, + {5,6,11,173}, + {5,7,12,265}, + {5,8,11,142}, + {5,9,12,253}, + {5,10,12,232}, + {5,11,13,400}, + {5,12,13,388}, + {5,13,13,378}, + {5,14,14,445}, + {5,15,10,16}, + {6,0,10,111}, + {6,1,9,54}, + {6,2,9,52}, + {6,3,10,100}, + {6,4,11,184}, + {6,5,11,178}, + {6,6,11,160}, + {6,7,11,133}, + {6,8,12,257}, + {6,9,12,244}, + {6,10,12,228}, + {6,11,12,217}, + {6,12,13,385}, + {6,13,13,366}, + {6,14,14,715}, + {6,15,10,10}, + {7,0,10,98}, + {7,1,9,48}, + {7,2,10,91}, + {7,3,10,88}, + {7,4,11,165}, + {7,5,11,157}, + {7,6,11,148}, + {7,7,12,261}, + {7,8,12,248}, + {7,9,13,407}, + {7,10,13,397}, + {7,11,13,372}, + {7,12,13,380}, + {7,13,15,889}, + {7,14,15,884}, + {7,15,10,8}, + {8,0,10,85}, + {8,1,10,84}, + {8,2,10,81}, + {8,3,11,159}, + {8,4,11,156}, + {8,5,11,143}, + {8,6,12,260}, + {8,7,12,249}, + {8,8,13,427}, + {8,9,13,401}, + {8,10,13,392}, + {8,11,13,383}, + {8,12,14,727}, + {8,13,14,713}, + {8,14,14,708}, + {8,15,10,7}, + {9,0,11,154}, + {9,1,10,76}, + {9,2,10,73}, + {9,3,11,141}, + {9,4,11,131}, + {9,5,12,256}, + {9,6,12,245}, + {9,7,13,426}, + {9,8,13,406}, + {9,9,13,394}, + {9,10,13,384}, + {9,11,14,735}, + {9,12,13,359}, + {9,13,14,710}, + {9,14,13,352}, + {9,15,11,11}, + {10,0,11,139}, + {10,1,11,129}, + {10,2,10,67}, + {10,3,11,125}, + {10,4,12,247}, + {10,5,12,233}, + {10,6,12,229}, + {10,7,12,219}, + {10,8,13,393}, + {10,9,14,743}, + {10,10,14,737}, + {10,11,14,720}, + {10,12,15,885}, + {10,13,15,882}, + {10,14,14,439}, + {10,15,10,4}, + {11,0,12,243}, + {11,1,11,120}, + {11,2,11,118}, + {11,3,11,115}, + {11,4,12,227}, + {11,5,12,223}, + {11,6,13,396}, + {11,7,14,746}, + {11,8,14,742}, + {11,9,14,736}, + {11,10,14,721}, + {11,11,14,712}, + {11,12,14,706}, + {11,13,13,223}, + {11,14,14,436}, + {11,15,11,6}, + {12,0,12,202}, + {12,1,12,224}, + {12,2,12,222}, + {12,3,12,218}, + {12,4,12,216}, + {12,5,13,389}, + {12,6,13,386}, + {12,7,13,381}, + {12,8,13,364}, + {12,9,15,888}, + {12,10,14,443}, + {12,11,14,707}, + {12,12,14,440}, + {12,13,14,437}, + {12,14,16,1728}, + {12,15,11,4}, + {13,0,14,747}, + {13,1,12,211}, + {13,2,12,210}, + {13,3,12,208}, + {13,4,13,370}, + {13,5,13,379}, + {13,6,14,734}, + {13,7,14,723}, + {13,8,14,714}, + {13,9,16,1735}, + {13,10,15,883}, + {13,11,15,877}, + {13,12,15,876}, + {13,13,17,3459}, + {13,14,15,865}, + {13,15,11,2}, + {14,0,13,377}, + {14,1,13,369}, + {14,2,11,102}, + {14,3,12,187}, + {14,4,14,726}, + {14,5,14,722}, + {14,6,13,358}, + {14,7,14,711}, + {14,8,14,709}, + {14,9,15,866}, + {14,10,16,1734}, + {14,11,15,871}, + {14,12,17,3458}, + {14,13,15,870}, + {14,14,14,434}, + {14,15,11,0}, + {15,0,9,12}, + {15,1,8,10}, + {15,2,8,7}, + {15,3,9,11}, + {15,4,9,10}, + {15,5,10,17}, + {15,6,10,11}, + {15,7,10,9}, + {15,8,11,13}, + {15,9,11,12}, + {15,10,11,10}, + {15,11,11,7}, + {15,12,11,5}, + {15,13,11,3}, + {15,14,11,1}, + {15,15,8,3}, + }, { // 21 + {0,0,1,1}, + {0,1,4,5}, + {0,2,6,14}, + {0,3,8,44}, + {0,4,9,74}, + {0,5,9,63}, + {0,6,10,110}, + {0,7,10,93}, + {0,8,11,172}, + {0,9,11,149}, + {0,10,11,138}, + {0,11,12,242}, + {0,12,12,225}, + {0,13,12,195}, + {0,14,13,376}, + {0,15,9,17}, + {1,0,3,3}, + {1,1,4,4}, + {1,2,6,12}, + {1,3,7,20}, + {1,4,8,35}, + {1,5,9,62}, + {1,6,9,53}, + {1,7,9,47}, + {1,8,10,83}, + {1,9,10,75}, + {1,10,10,68}, + {1,11,11,119}, + {1,12,12,201}, + {1,13,11,107}, + {1,14,12,207}, + {1,15,8,9}, + {2,0,6,15}, + {2,1,6,13}, + {2,2,7,23}, + {2,3,8,38}, + {2,4,9,67}, + {2,5,9,58}, + {2,6,10,103}, + {2,7,10,90}, + {2,8,11,161}, + {2,9,10,72}, + {2,10,11,127}, + {2,11,11,117}, + {2,12,11,110}, + {2,13,12,209}, + {2,14,12,206}, + {2,15,9,16}, + {3,0,8,45}, + {3,1,7,21}, + {3,2,8,39}, + {3,3,9,69}, + {3,4,9,64}, + {3,5,10,114}, + {3,6,10,99}, + {3,7,10,87}, + {3,8,11,158}, + {3,9,11,140}, + {3,10,12,252}, + {3,11,12,212}, + {3,12,12,199}, + {3,13,13,387}, + {3,14,13,365}, + {3,15,10,26}, + {4,0,9,75}, + {4,1,8,36}, + {4,2,9,68}, + {4,3,9,65}, + {4,4,10,115}, + {4,5,10,101}, + {4,6,11,179}, + {4,7,11,164}, + {4,8,11,155}, + {4,9,12,264}, + {4,10,12,246}, + {4,11,12,226}, + {4,12,13,395}, + {4,13,13,382}, + {4,14,13,362}, + {4,15,9,9}, + {5,0,9,66}, + {5,1,8,30}, + {5,2,9,59}, + {5,3,9,56}, + {5,4,10,102}, + {5,5,11,185}, + {5,6,11,173}, + {5,7,12,265}, + {5,8,11,142}, + {5,9,12,253}, + {5,10,12,232}, + {5,11,13,400}, + {5,12,13,388}, + {5,13,13,378}, + {5,14,14,445}, + {5,15,10,16}, + {6,0,10,111}, + {6,1,9,54}, + {6,2,9,52}, + {6,3,10,100}, + {6,4,11,184}, + {6,5,11,178}, + {6,6,11,160}, + {6,7,11,133}, + {6,8,12,257}, + {6,9,12,244}, + {6,10,12,228}, + {6,11,12,217}, + {6,12,13,385}, + {6,13,13,366}, + {6,14,14,715}, + {6,15,10,10}, + {7,0,10,98}, + {7,1,9,48}, + {7,2,10,91}, + {7,3,10,88}, + {7,4,11,165}, + {7,5,11,157}, + {7,6,11,148}, + {7,7,12,261}, + {7,8,12,248}, + {7,9,13,407}, + {7,10,13,397}, + {7,11,13,372}, + {7,12,13,380}, + {7,13,15,889}, + {7,14,15,884}, + {7,15,10,8}, + {8,0,10,85}, + {8,1,10,84}, + {8,2,10,81}, + {8,3,11,159}, + {8,4,11,156}, + {8,5,11,143}, + {8,6,12,260}, + {8,7,12,249}, + {8,8,13,427}, + {8,9,13,401}, + {8,10,13,392}, + {8,11,13,383}, + {8,12,14,727}, + {8,13,14,713}, + {8,14,14,708}, + {8,15,10,7}, + {9,0,11,154}, + {9,1,10,76}, + {9,2,10,73}, + {9,3,11,141}, + {9,4,11,131}, + {9,5,12,256}, + {9,6,12,245}, + {9,7,13,426}, + {9,8,13,406}, + {9,9,13,394}, + {9,10,13,384}, + {9,11,14,735}, + {9,12,13,359}, + {9,13,14,710}, + {9,14,13,352}, + {9,15,11,11}, + {10,0,11,139}, + {10,1,11,129}, + {10,2,10,67}, + {10,3,11,125}, + {10,4,12,247}, + {10,5,12,233}, + {10,6,12,229}, + {10,7,12,219}, + {10,8,13,393}, + {10,9,14,743}, + {10,10,14,737}, + {10,11,14,720}, + {10,12,15,885}, + {10,13,15,882}, + {10,14,14,439}, + {10,15,10,4}, + {11,0,12,243}, + {11,1,11,120}, + {11,2,11,118}, + {11,3,11,115}, + {11,4,12,227}, + {11,5,12,223}, + {11,6,13,396}, + {11,7,14,746}, + {11,8,14,742}, + {11,9,14,736}, + {11,10,14,721}, + {11,11,14,712}, + {11,12,14,706}, + {11,13,13,223}, + {11,14,14,436}, + {11,15,11,6}, + {12,0,12,202}, + {12,1,12,224}, + {12,2,12,222}, + {12,3,12,218}, + {12,4,12,216}, + {12,5,13,389}, + {12,6,13,386}, + {12,7,13,381}, + {12,8,13,364}, + {12,9,15,888}, + {12,10,14,443}, + {12,11,14,707}, + {12,12,14,440}, + {12,13,14,437}, + {12,14,16,1728}, + {12,15,11,4}, + {13,0,14,747}, + {13,1,12,211}, + {13,2,12,210}, + {13,3,12,208}, + {13,4,13,370}, + {13,5,13,379}, + {13,6,14,734}, + {13,7,14,723}, + {13,8,14,714}, + {13,9,16,1735}, + {13,10,15,883}, + {13,11,15,877}, + {13,12,15,876}, + {13,13,17,3459}, + {13,14,15,865}, + {13,15,11,2}, + {14,0,13,377}, + {14,1,13,369}, + {14,2,11,102}, + {14,3,12,187}, + {14,4,14,726}, + {14,5,14,722}, + {14,6,13,358}, + {14,7,14,711}, + {14,8,14,709}, + {14,9,15,866}, + {14,10,16,1734}, + {14,11,15,871}, + {14,12,17,3458}, + {14,13,15,870}, + {14,14,14,434}, + {14,15,11,0}, + {15,0,9,12}, + {15,1,8,10}, + {15,2,8,7}, + {15,3,9,11}, + {15,4,9,10}, + {15,5,10,17}, + {15,6,10,11}, + {15,7,10,9}, + {15,8,11,13}, + {15,9,11,12}, + {15,10,11,10}, + {15,11,11,7}, + {15,12,11,5}, + {15,13,11,3}, + {15,14,11,1}, + {15,15,8,3}, + }, { // 22 + {0,0,1,1}, + {0,1,4,5}, + {0,2,6,14}, + {0,3,8,44}, + {0,4,9,74}, + {0,5,9,63}, + {0,6,10,110}, + {0,7,10,93}, + {0,8,11,172}, + {0,9,11,149}, + {0,10,11,138}, + {0,11,12,242}, + {0,12,12,225}, + {0,13,12,195}, + {0,14,13,376}, + {0,15,9,17}, + {1,0,3,3}, + {1,1,4,4}, + {1,2,6,12}, + {1,3,7,20}, + {1,4,8,35}, + {1,5,9,62}, + {1,6,9,53}, + {1,7,9,47}, + {1,8,10,83}, + {1,9,10,75}, + {1,10,10,68}, + {1,11,11,119}, + {1,12,12,201}, + {1,13,11,107}, + {1,14,12,207}, + {1,15,8,9}, + {2,0,6,15}, + {2,1,6,13}, + {2,2,7,23}, + {2,3,8,38}, + {2,4,9,67}, + {2,5,9,58}, + {2,6,10,103}, + {2,7,10,90}, + {2,8,11,161}, + {2,9,10,72}, + {2,10,11,127}, + {2,11,11,117}, + {2,12,11,110}, + {2,13,12,209}, + {2,14,12,206}, + {2,15,9,16}, + {3,0,8,45}, + {3,1,7,21}, + {3,2,8,39}, + {3,3,9,69}, + {3,4,9,64}, + {3,5,10,114}, + {3,6,10,99}, + {3,7,10,87}, + {3,8,11,158}, + {3,9,11,140}, + {3,10,12,252}, + {3,11,12,212}, + {3,12,12,199}, + {3,13,13,387}, + {3,14,13,365}, + {3,15,10,26}, + {4,0,9,75}, + {4,1,8,36}, + {4,2,9,68}, + {4,3,9,65}, + {4,4,10,115}, + {4,5,10,101}, + {4,6,11,179}, + {4,7,11,164}, + {4,8,11,155}, + {4,9,12,264}, + {4,10,12,246}, + {4,11,12,226}, + {4,12,13,395}, + {4,13,13,382}, + {4,14,13,362}, + {4,15,9,9}, + {5,0,9,66}, + {5,1,8,30}, + {5,2,9,59}, + {5,3,9,56}, + {5,4,10,102}, + {5,5,11,185}, + {5,6,11,173}, + {5,7,12,265}, + {5,8,11,142}, + {5,9,12,253}, + {5,10,12,232}, + {5,11,13,400}, + {5,12,13,388}, + {5,13,13,378}, + {5,14,14,445}, + {5,15,10,16}, + {6,0,10,111}, + {6,1,9,54}, + {6,2,9,52}, + {6,3,10,100}, + {6,4,11,184}, + {6,5,11,178}, + {6,6,11,160}, + {6,7,11,133}, + {6,8,12,257}, + {6,9,12,244}, + {6,10,12,228}, + {6,11,12,217}, + {6,12,13,385}, + {6,13,13,366}, + {6,14,14,715}, + {6,15,10,10}, + {7,0,10,98}, + {7,1,9,48}, + {7,2,10,91}, + {7,3,10,88}, + {7,4,11,165}, + {7,5,11,157}, + {7,6,11,148}, + {7,7,12,261}, + {7,8,12,248}, + {7,9,13,407}, + {7,10,13,397}, + {7,11,13,372}, + {7,12,13,380}, + {7,13,15,889}, + {7,14,15,884}, + {7,15,10,8}, + {8,0,10,85}, + {8,1,10,84}, + {8,2,10,81}, + {8,3,11,159}, + {8,4,11,156}, + {8,5,11,143}, + {8,6,12,260}, + {8,7,12,249}, + {8,8,13,427}, + {8,9,13,401}, + {8,10,13,392}, + {8,11,13,383}, + {8,12,14,727}, + {8,13,14,713}, + {8,14,14,708}, + {8,15,10,7}, + {9,0,11,154}, + {9,1,10,76}, + {9,2,10,73}, + {9,3,11,141}, + {9,4,11,131}, + {9,5,12,256}, + {9,6,12,245}, + {9,7,13,426}, + {9,8,13,406}, + {9,9,13,394}, + {9,10,13,384}, + {9,11,14,735}, + {9,12,13,359}, + {9,13,14,710}, + {9,14,13,352}, + {9,15,11,11}, + {10,0,11,139}, + {10,1,11,129}, + {10,2,10,67}, + {10,3,11,125}, + {10,4,12,247}, + {10,5,12,233}, + {10,6,12,229}, + {10,7,12,219}, + {10,8,13,393}, + {10,9,14,743}, + {10,10,14,737}, + {10,11,14,720}, + {10,12,15,885}, + {10,13,15,882}, + {10,14,14,439}, + {10,15,10,4}, + {11,0,12,243}, + {11,1,11,120}, + {11,2,11,118}, + {11,3,11,115}, + {11,4,12,227}, + {11,5,12,223}, + {11,6,13,396}, + {11,7,14,746}, + {11,8,14,742}, + {11,9,14,736}, + {11,10,14,721}, + {11,11,14,712}, + {11,12,14,706}, + {11,13,13,223}, + {11,14,14,436}, + {11,15,11,6}, + {12,0,12,202}, + {12,1,12,224}, + {12,2,12,222}, + {12,3,12,218}, + {12,4,12,216}, + {12,5,13,389}, + {12,6,13,386}, + {12,7,13,381}, + {12,8,13,364}, + {12,9,15,888}, + {12,10,14,443}, + {12,11,14,707}, + {12,12,14,440}, + {12,13,14,437}, + {12,14,16,1728}, + {12,15,11,4}, + {13,0,14,747}, + {13,1,12,211}, + {13,2,12,210}, + {13,3,12,208}, + {13,4,13,370}, + {13,5,13,379}, + {13,6,14,734}, + {13,7,14,723}, + {13,8,14,714}, + {13,9,16,1735}, + {13,10,15,883}, + {13,11,15,877}, + {13,12,15,876}, + {13,13,17,3459}, + {13,14,15,865}, + {13,15,11,2}, + {14,0,13,377}, + {14,1,13,369}, + {14,2,11,102}, + {14,3,12,187}, + {14,4,14,726}, + {14,5,14,722}, + {14,6,13,358}, + {14,7,14,711}, + {14,8,14,709}, + {14,9,15,866}, + {14,10,16,1734}, + {14,11,15,871}, + {14,12,17,3458}, + {14,13,15,870}, + {14,14,14,434}, + {14,15,11,0}, + {15,0,9,12}, + {15,1,8,10}, + {15,2,8,7}, + {15,3,9,11}, + {15,4,9,10}, + {15,5,10,17}, + {15,6,10,11}, + {15,7,10,9}, + {15,8,11,13}, + {15,9,11,12}, + {15,10,11,10}, + {15,11,11,7}, + {15,12,11,5}, + {15,13,11,3}, + {15,14,11,1}, + {15,15,8,3}, + }, { // 23 + {0,0,1,1}, + {0,1,4,5}, + {0,2,6,14}, + {0,3,8,44}, + {0,4,9,74}, + {0,5,9,63}, + {0,6,10,110}, + {0,7,10,93}, + {0,8,11,172}, + {0,9,11,149}, + {0,10,11,138}, + {0,11,12,242}, + {0,12,12,225}, + {0,13,12,195}, + {0,14,13,376}, + {0,15,9,17}, + {1,0,3,3}, + {1,1,4,4}, + {1,2,6,12}, + {1,3,7,20}, + {1,4,8,35}, + {1,5,9,62}, + {1,6,9,53}, + {1,7,9,47}, + {1,8,10,83}, + {1,9,10,75}, + {1,10,10,68}, + {1,11,11,119}, + {1,12,12,201}, + {1,13,11,107}, + {1,14,12,207}, + {1,15,8,9}, + {2,0,6,15}, + {2,1,6,13}, + {2,2,7,23}, + {2,3,8,38}, + {2,4,9,67}, + {2,5,9,58}, + {2,6,10,103}, + {2,7,10,90}, + {2,8,11,161}, + {2,9,10,72}, + {2,10,11,127}, + {2,11,11,117}, + {2,12,11,110}, + {2,13,12,209}, + {2,14,12,206}, + {2,15,9,16}, + {3,0,8,45}, + {3,1,7,21}, + {3,2,8,39}, + {3,3,9,69}, + {3,4,9,64}, + {3,5,10,114}, + {3,6,10,99}, + {3,7,10,87}, + {3,8,11,158}, + {3,9,11,140}, + {3,10,12,252}, + {3,11,12,212}, + {3,12,12,199}, + {3,13,13,387}, + {3,14,13,365}, + {3,15,10,26}, + {4,0,9,75}, + {4,1,8,36}, + {4,2,9,68}, + {4,3,9,65}, + {4,4,10,115}, + {4,5,10,101}, + {4,6,11,179}, + {4,7,11,164}, + {4,8,11,155}, + {4,9,12,264}, + {4,10,12,246}, + {4,11,12,226}, + {4,12,13,395}, + {4,13,13,382}, + {4,14,13,362}, + {4,15,9,9}, + {5,0,9,66}, + {5,1,8,30}, + {5,2,9,59}, + {5,3,9,56}, + {5,4,10,102}, + {5,5,11,185}, + {5,6,11,173}, + {5,7,12,265}, + {5,8,11,142}, + {5,9,12,253}, + {5,10,12,232}, + {5,11,13,400}, + {5,12,13,388}, + {5,13,13,378}, + {5,14,14,445}, + {5,15,10,16}, + {6,0,10,111}, + {6,1,9,54}, + {6,2,9,52}, + {6,3,10,100}, + {6,4,11,184}, + {6,5,11,178}, + {6,6,11,160}, + {6,7,11,133}, + {6,8,12,257}, + {6,9,12,244}, + {6,10,12,228}, + {6,11,12,217}, + {6,12,13,385}, + {6,13,13,366}, + {6,14,14,715}, + {6,15,10,10}, + {7,0,10,98}, + {7,1,9,48}, + {7,2,10,91}, + {7,3,10,88}, + {7,4,11,165}, + {7,5,11,157}, + {7,6,11,148}, + {7,7,12,261}, + {7,8,12,248}, + {7,9,13,407}, + {7,10,13,397}, + {7,11,13,372}, + {7,12,13,380}, + {7,13,15,889}, + {7,14,15,884}, + {7,15,10,8}, + {8,0,10,85}, + {8,1,10,84}, + {8,2,10,81}, + {8,3,11,159}, + {8,4,11,156}, + {8,5,11,143}, + {8,6,12,260}, + {8,7,12,249}, + {8,8,13,427}, + {8,9,13,401}, + {8,10,13,392}, + {8,11,13,383}, + {8,12,14,727}, + {8,13,14,713}, + {8,14,14,708}, + {8,15,10,7}, + {9,0,11,154}, + {9,1,10,76}, + {9,2,10,73}, + {9,3,11,141}, + {9,4,11,131}, + {9,5,12,256}, + {9,6,12,245}, + {9,7,13,426}, + {9,8,13,406}, + {9,9,13,394}, + {9,10,13,384}, + {9,11,14,735}, + {9,12,13,359}, + {9,13,14,710}, + {9,14,13,352}, + {9,15,11,11}, + {10,0,11,139}, + {10,1,11,129}, + {10,2,10,67}, + {10,3,11,125}, + {10,4,12,247}, + {10,5,12,233}, + {10,6,12,229}, + {10,7,12,219}, + {10,8,13,393}, + {10,9,14,743}, + {10,10,14,737}, + {10,11,14,720}, + {10,12,15,885}, + {10,13,15,882}, + {10,14,14,439}, + {10,15,10,4}, + {11,0,12,243}, + {11,1,11,120}, + {11,2,11,118}, + {11,3,11,115}, + {11,4,12,227}, + {11,5,12,223}, + {11,6,13,396}, + {11,7,14,746}, + {11,8,14,742}, + {11,9,14,736}, + {11,10,14,721}, + {11,11,14,712}, + {11,12,14,706}, + {11,13,13,223}, + {11,14,14,436}, + {11,15,11,6}, + {12,0,12,202}, + {12,1,12,224}, + {12,2,12,222}, + {12,3,12,218}, + {12,4,12,216}, + {12,5,13,389}, + {12,6,13,386}, + {12,7,13,381}, + {12,8,13,364}, + {12,9,15,888}, + {12,10,14,443}, + {12,11,14,707}, + {12,12,14,440}, + {12,13,14,437}, + {12,14,16,1728}, + {12,15,11,4}, + {13,0,14,747}, + {13,1,12,211}, + {13,2,12,210}, + {13,3,12,208}, + {13,4,13,370}, + {13,5,13,379}, + {13,6,14,734}, + {13,7,14,723}, + {13,8,14,714}, + {13,9,16,1735}, + {13,10,15,883}, + {13,11,15,877}, + {13,12,15,876}, + {13,13,17,3459}, + {13,14,15,865}, + {13,15,11,2}, + {14,0,13,377}, + {14,1,13,369}, + {14,2,11,102}, + {14,3,12,187}, + {14,4,14,726}, + {14,5,14,722}, + {14,6,13,358}, + {14,7,14,711}, + {14,8,14,709}, + {14,9,15,866}, + {14,10,16,1734}, + {14,11,15,871}, + {14,12,17,3458}, + {14,13,15,870}, + {14,14,14,434}, + {14,15,11,0}, + {15,0,9,12}, + {15,1,8,10}, + {15,2,8,7}, + {15,3,9,11}, + {15,4,9,10}, + {15,5,10,17}, + {15,6,10,11}, + {15,7,10,9}, + {15,8,11,13}, + {15,9,11,12}, + {15,10,11,10}, + {15,11,11,7}, + {15,12,11,5}, + {15,13,11,3}, + {15,14,11,1}, + {15,15,8,3}, + }, { // 24 + {0,0,4,15}, + {0,1,4,13}, + {0,2,6,46}, + {0,3,7,80}, + {0,4,8,146}, + {0,5,9,262}, + {0,6,9,248}, + {0,7,10,434}, + {0,8,10,426}, + {0,9,11,669}, + {0,10,11,653}, + {0,11,11,649}, + {0,12,11,621}, + {0,13,11,517}, + {0,14,12,1032}, + {0,15,9,88}, + {1,0,4,14}, + {1,1,4,12}, + {1,2,5,21}, + {1,3,6,38}, + {1,4,7,71}, + {1,5,8,130}, + {1,6,8,122}, + {1,7,9,216}, + {1,8,9,209}, + {1,9,9,198}, + {1,10,10,327}, + {1,11,10,345}, + {1,12,10,319}, + {1,13,10,297}, + {1,14,10,279}, + {1,15,8,42}, + {2,0,6,47}, + {2,1,5,22}, + {2,2,6,41}, + {2,3,7,74}, + {2,4,7,68}, + {2,5,8,128}, + {2,6,8,120}, + {2,7,9,221}, + {2,8,9,207}, + {2,9,9,194}, + {2,10,9,182}, + {2,11,10,340}, + {2,12,10,315}, + {2,13,10,295}, + {2,14,11,541}, + {2,15,7,18}, + {3,0,7,81}, + {3,1,6,39}, + {3,2,7,75}, + {3,3,7,70}, + {3,4,8,134}, + {3,5,8,125}, + {3,6,8,116}, + {3,7,9,220}, + {3,8,9,204}, + {3,9,9,190}, + {3,10,9,178}, + {3,11,10,325}, + {3,12,10,311}, + {3,13,10,293}, + {3,14,10,271}, + {3,15,7,16}, + {4,0,8,147}, + {4,1,7,72}, + {4,2,7,69}, + {4,3,8,135}, + {4,4,8,127}, + {4,5,8,118}, + {4,6,8,112}, + {4,7,9,210}, + {4,8,9,200}, + {4,9,9,188}, + {4,10,10,352}, + {4,11,10,323}, + {4,12,10,306}, + {4,13,10,285}, + {4,14,11,540}, + {4,15,7,14}, + {5,0,9,263}, + {5,1,7,66}, + {5,2,8,129}, + {5,3,8,126}, + {5,4,8,119}, + {5,5,8,114}, + {5,6,9,214}, + {5,7,9,202}, + {5,8,9,192}, + {5,9,9,180}, + {5,10,10,341}, + {5,11,10,317}, + {5,12,10,301}, + {5,13,10,281}, + {5,14,10,262}, + {5,15,7,12}, + {6,0,9,249}, + {6,1,8,123}, + {6,2,8,121}, + {6,3,8,117}, + {6,4,8,113}, + {6,5,9,215}, + {6,6,9,206}, + {6,7,9,195}, + {6,8,9,185}, + {6,9,10,347}, + {6,10,10,330}, + {6,11,10,308}, + {6,12,10,291}, + {6,13,10,272}, + {6,14,11,520}, + {6,15,7,10}, + {7,0,10,435}, + {7,1,8,115}, + {7,2,8,111}, + {7,3,8,109}, + {7,4,9,211}, + {7,5,9,203}, + {7,6,9,196}, + {7,7,9,187}, + {7,8,10,353}, + {7,9,10,332}, + {7,10,10,313}, + {7,11,10,298}, + {7,12,10,283}, + {7,13,11,531}, + {7,14,11,381}, + {7,15,8,17}, + {8,0,10,427}, + {8,1,9,212}, + {8,2,9,208}, + {8,3,9,205}, + {8,4,9,201}, + {8,5,9,193}, + {8,6,9,186}, + {8,7,9,177}, + {8,8,9,169}, + {8,9,10,320}, + {8,10,10,303}, + {8,11,10,286}, + {8,12,10,268}, + {8,13,11,514}, + {8,14,11,377}, + {8,15,8,16}, + {9,0,10,335}, + {9,1,9,199}, + {9,2,9,197}, + {9,3,9,191}, + {9,4,9,189}, + {9,5,9,181}, + {9,6,9,174}, + {9,7,10,333}, + {9,8,10,321}, + {9,9,10,305}, + {9,10,10,289}, + {9,11,10,275}, + {9,12,11,521}, + {9,13,11,379}, + {9,14,11,371}, + {9,15,8,11}, + {10,0,11,668}, + {10,1,9,184}, + {10,2,9,183}, + {10,3,9,179}, + {10,4,9,175}, + {10,5,10,344}, + {10,6,10,331}, + {10,7,10,314}, + {10,8,10,304}, + {10,9,10,290}, + {10,10,10,277}, + {10,11,11,530}, + {10,12,11,383}, + {10,13,11,373}, + {10,14,11,366}, + {10,15,8,10}, + {11,0,11,652}, + {11,1,10,346}, + {11,2,9,171}, + {11,3,9,168}, + {11,4,9,164}, + {11,5,10,318}, + {11,6,10,309}, + {11,7,10,299}, + {11,8,10,287}, + {11,9,10,276}, + {11,10,10,263}, + {11,11,11,513}, + {11,12,11,375}, + {11,13,11,368}, + {11,14,11,362}, + {11,15,8,6}, + {12,0,11,648}, + {12,1,10,322}, + {12,2,10,316}, + {12,3,10,312}, + {12,4,10,307}, + {12,5,10,302}, + {12,6,10,292}, + {12,7,10,284}, + {12,8,10,269}, + {12,9,10,261}, + {12,10,11,512}, + {12,11,11,376}, + {12,12,11,370}, + {12,13,11,364}, + {12,14,11,359}, + {12,15,8,4}, + {13,0,11,620}, + {13,1,10,300}, + {13,2,10,296}, + {13,3,10,294}, + {13,4,10,288}, + {13,5,10,282}, + {13,6,10,273}, + {13,7,10,266}, + {13,8,11,515}, + {13,9,11,380}, + {13,10,11,374}, + {13,11,11,369}, + {13,12,11,365}, + {13,13,11,361}, + {13,14,11,357}, + {13,15,8,2}, + {14,0,12,1033}, + {14,1,10,280}, + {14,2,10,278}, + {14,3,10,274}, + {14,4,10,267}, + {14,5,10,264}, + {14,6,10,259}, + {14,7,11,382}, + {14,8,11,378}, + {14,9,11,372}, + {14,10,11,367}, + {14,11,11,363}, + {14,12,11,360}, + {14,13,11,358}, + {14,14,11,356}, + {14,15,8,0}, + {15,0,8,43}, + {15,1,7,20}, + {15,2,7,19}, + {15,3,7,17}, + {15,4,7,15}, + {15,5,7,13}, + {15,6,7,11}, + {15,7,7,9}, + {15,8,7,7}, + {15,9,7,6}, + {15,10,7,4}, + {15,11,8,7}, + {15,12,8,5}, + {15,13,8,3}, + {15,14,8,1}, + {15,15,4,3}, + }, { // 25 + {0,0,4,15}, + {0,1,4,13}, + {0,2,6,46}, + {0,3,7,80}, + {0,4,8,146}, + {0,5,9,262}, + {0,6,9,248}, + {0,7,10,434}, + {0,8,10,426}, + {0,9,11,669}, + {0,10,11,653}, + {0,11,11,649}, + {0,12,11,621}, + {0,13,11,517}, + {0,14,12,1032}, + {0,15,9,88}, + {1,0,4,14}, + {1,1,4,12}, + {1,2,5,21}, + {1,3,6,38}, + {1,4,7,71}, + {1,5,8,130}, + {1,6,8,122}, + {1,7,9,216}, + {1,8,9,209}, + {1,9,9,198}, + {1,10,10,327}, + {1,11,10,345}, + {1,12,10,319}, + {1,13,10,297}, + {1,14,10,279}, + {1,15,8,42}, + {2,0,6,47}, + {2,1,5,22}, + {2,2,6,41}, + {2,3,7,74}, + {2,4,7,68}, + {2,5,8,128}, + {2,6,8,120}, + {2,7,9,221}, + {2,8,9,207}, + {2,9,9,194}, + {2,10,9,182}, + {2,11,10,340}, + {2,12,10,315}, + {2,13,10,295}, + {2,14,11,541}, + {2,15,7,18}, + {3,0,7,81}, + {3,1,6,39}, + {3,2,7,75}, + {3,3,7,70}, + {3,4,8,134}, + {3,5,8,125}, + {3,6,8,116}, + {3,7,9,220}, + {3,8,9,204}, + {3,9,9,190}, + {3,10,9,178}, + {3,11,10,325}, + {3,12,10,311}, + {3,13,10,293}, + {3,14,10,271}, + {3,15,7,16}, + {4,0,8,147}, + {4,1,7,72}, + {4,2,7,69}, + {4,3,8,135}, + {4,4,8,127}, + {4,5,8,118}, + {4,6,8,112}, + {4,7,9,210}, + {4,8,9,200}, + {4,9,9,188}, + {4,10,10,352}, + {4,11,10,323}, + {4,12,10,306}, + {4,13,10,285}, + {4,14,11,540}, + {4,15,7,14}, + {5,0,9,263}, + {5,1,7,66}, + {5,2,8,129}, + {5,3,8,126}, + {5,4,8,119}, + {5,5,8,114}, + {5,6,9,214}, + {5,7,9,202}, + {5,8,9,192}, + {5,9,9,180}, + {5,10,10,341}, + {5,11,10,317}, + {5,12,10,301}, + {5,13,10,281}, + {5,14,10,262}, + {5,15,7,12}, + {6,0,9,249}, + {6,1,8,123}, + {6,2,8,121}, + {6,3,8,117}, + {6,4,8,113}, + {6,5,9,215}, + {6,6,9,206}, + {6,7,9,195}, + {6,8,9,185}, + {6,9,10,347}, + {6,10,10,330}, + {6,11,10,308}, + {6,12,10,291}, + {6,13,10,272}, + {6,14,11,520}, + {6,15,7,10}, + {7,0,10,435}, + {7,1,8,115}, + {7,2,8,111}, + {7,3,8,109}, + {7,4,9,211}, + {7,5,9,203}, + {7,6,9,196}, + {7,7,9,187}, + {7,8,10,353}, + {7,9,10,332}, + {7,10,10,313}, + {7,11,10,298}, + {7,12,10,283}, + {7,13,11,531}, + {7,14,11,381}, + {7,15,8,17}, + {8,0,10,427}, + {8,1,9,212}, + {8,2,9,208}, + {8,3,9,205}, + {8,4,9,201}, + {8,5,9,193}, + {8,6,9,186}, + {8,7,9,177}, + {8,8,9,169}, + {8,9,10,320}, + {8,10,10,303}, + {8,11,10,286}, + {8,12,10,268}, + {8,13,11,514}, + {8,14,11,377}, + {8,15,8,16}, + {9,0,10,335}, + {9,1,9,199}, + {9,2,9,197}, + {9,3,9,191}, + {9,4,9,189}, + {9,5,9,181}, + {9,6,9,174}, + {9,7,10,333}, + {9,8,10,321}, + {9,9,10,305}, + {9,10,10,289}, + {9,11,10,275}, + {9,12,11,521}, + {9,13,11,379}, + {9,14,11,371}, + {9,15,8,11}, + {10,0,11,668}, + {10,1,9,184}, + {10,2,9,183}, + {10,3,9,179}, + {10,4,9,175}, + {10,5,10,344}, + {10,6,10,331}, + {10,7,10,314}, + {10,8,10,304}, + {10,9,10,290}, + {10,10,10,277}, + {10,11,11,530}, + {10,12,11,383}, + {10,13,11,373}, + {10,14,11,366}, + {10,15,8,10}, + {11,0,11,652}, + {11,1,10,346}, + {11,2,9,171}, + {11,3,9,168}, + {11,4,9,164}, + {11,5,10,318}, + {11,6,10,309}, + {11,7,10,299}, + {11,8,10,287}, + {11,9,10,276}, + {11,10,10,263}, + {11,11,11,513}, + {11,12,11,375}, + {11,13,11,368}, + {11,14,11,362}, + {11,15,8,6}, + {12,0,11,648}, + {12,1,10,322}, + {12,2,10,316}, + {12,3,10,312}, + {12,4,10,307}, + {12,5,10,302}, + {12,6,10,292}, + {12,7,10,284}, + {12,8,10,269}, + {12,9,10,261}, + {12,10,11,512}, + {12,11,11,376}, + {12,12,11,370}, + {12,13,11,364}, + {12,14,11,359}, + {12,15,8,4}, + {13,0,11,620}, + {13,1,10,300}, + {13,2,10,296}, + {13,3,10,294}, + {13,4,10,288}, + {13,5,10,282}, + {13,6,10,273}, + {13,7,10,266}, + {13,8,11,515}, + {13,9,11,380}, + {13,10,11,374}, + {13,11,11,369}, + {13,12,11,365}, + {13,13,11,361}, + {13,14,11,357}, + {13,15,8,2}, + {14,0,12,1033}, + {14,1,10,280}, + {14,2,10,278}, + {14,3,10,274}, + {14,4,10,267}, + {14,5,10,264}, + {14,6,10,259}, + {14,7,11,382}, + {14,8,11,378}, + {14,9,11,372}, + {14,10,11,367}, + {14,11,11,363}, + {14,12,11,360}, + {14,13,11,358}, + {14,14,11,356}, + {14,15,8,0}, + {15,0,8,43}, + {15,1,7,20}, + {15,2,7,19}, + {15,3,7,17}, + {15,4,7,15}, + {15,5,7,13}, + {15,6,7,11}, + {15,7,7,9}, + {15,8,7,7}, + {15,9,7,6}, + {15,10,7,4}, + {15,11,8,7}, + {15,12,8,5}, + {15,13,8,3}, + {15,14,8,1}, + {15,15,4,3}, + }, { // 26 + {0,0,4,15}, + {0,1,4,13}, + {0,2,6,46}, + {0,3,7,80}, + {0,4,8,146}, + {0,5,9,262}, + {0,6,9,248}, + {0,7,10,434}, + {0,8,10,426}, + {0,9,11,669}, + {0,10,11,653}, + {0,11,11,649}, + {0,12,11,621}, + {0,13,11,517}, + {0,14,12,1032}, + {0,15,9,88}, + {1,0,4,14}, + {1,1,4,12}, + {1,2,5,21}, + {1,3,6,38}, + {1,4,7,71}, + {1,5,8,130}, + {1,6,8,122}, + {1,7,9,216}, + {1,8,9,209}, + {1,9,9,198}, + {1,10,10,327}, + {1,11,10,345}, + {1,12,10,319}, + {1,13,10,297}, + {1,14,10,279}, + {1,15,8,42}, + {2,0,6,47}, + {2,1,5,22}, + {2,2,6,41}, + {2,3,7,74}, + {2,4,7,68}, + {2,5,8,128}, + {2,6,8,120}, + {2,7,9,221}, + {2,8,9,207}, + {2,9,9,194}, + {2,10,9,182}, + {2,11,10,340}, + {2,12,10,315}, + {2,13,10,295}, + {2,14,11,541}, + {2,15,7,18}, + {3,0,7,81}, + {3,1,6,39}, + {3,2,7,75}, + {3,3,7,70}, + {3,4,8,134}, + {3,5,8,125}, + {3,6,8,116}, + {3,7,9,220}, + {3,8,9,204}, + {3,9,9,190}, + {3,10,9,178}, + {3,11,10,325}, + {3,12,10,311}, + {3,13,10,293}, + {3,14,10,271}, + {3,15,7,16}, + {4,0,8,147}, + {4,1,7,72}, + {4,2,7,69}, + {4,3,8,135}, + {4,4,8,127}, + {4,5,8,118}, + {4,6,8,112}, + {4,7,9,210}, + {4,8,9,200}, + {4,9,9,188}, + {4,10,10,352}, + {4,11,10,323}, + {4,12,10,306}, + {4,13,10,285}, + {4,14,11,540}, + {4,15,7,14}, + {5,0,9,263}, + {5,1,7,66}, + {5,2,8,129}, + {5,3,8,126}, + {5,4,8,119}, + {5,5,8,114}, + {5,6,9,214}, + {5,7,9,202}, + {5,8,9,192}, + {5,9,9,180}, + {5,10,10,341}, + {5,11,10,317}, + {5,12,10,301}, + {5,13,10,281}, + {5,14,10,262}, + {5,15,7,12}, + {6,0,9,249}, + {6,1,8,123}, + {6,2,8,121}, + {6,3,8,117}, + {6,4,8,113}, + {6,5,9,215}, + {6,6,9,206}, + {6,7,9,195}, + {6,8,9,185}, + {6,9,10,347}, + {6,10,10,330}, + {6,11,10,308}, + {6,12,10,291}, + {6,13,10,272}, + {6,14,11,520}, + {6,15,7,10}, + {7,0,10,435}, + {7,1,8,115}, + {7,2,8,111}, + {7,3,8,109}, + {7,4,9,211}, + {7,5,9,203}, + {7,6,9,196}, + {7,7,9,187}, + {7,8,10,353}, + {7,9,10,332}, + {7,10,10,313}, + {7,11,10,298}, + {7,12,10,283}, + {7,13,11,531}, + {7,14,11,381}, + {7,15,8,17}, + {8,0,10,427}, + {8,1,9,212}, + {8,2,9,208}, + {8,3,9,205}, + {8,4,9,201}, + {8,5,9,193}, + {8,6,9,186}, + {8,7,9,177}, + {8,8,9,169}, + {8,9,10,320}, + {8,10,10,303}, + {8,11,10,286}, + {8,12,10,268}, + {8,13,11,514}, + {8,14,11,377}, + {8,15,8,16}, + {9,0,10,335}, + {9,1,9,199}, + {9,2,9,197}, + {9,3,9,191}, + {9,4,9,189}, + {9,5,9,181}, + {9,6,9,174}, + {9,7,10,333}, + {9,8,10,321}, + {9,9,10,305}, + {9,10,10,289}, + {9,11,10,275}, + {9,12,11,521}, + {9,13,11,379}, + {9,14,11,371}, + {9,15,8,11}, + {10,0,11,668}, + {10,1,9,184}, + {10,2,9,183}, + {10,3,9,179}, + {10,4,9,175}, + {10,5,10,344}, + {10,6,10,331}, + {10,7,10,314}, + {10,8,10,304}, + {10,9,10,290}, + {10,10,10,277}, + {10,11,11,530}, + {10,12,11,383}, + {10,13,11,373}, + {10,14,11,366}, + {10,15,8,10}, + {11,0,11,652}, + {11,1,10,346}, + {11,2,9,171}, + {11,3,9,168}, + {11,4,9,164}, + {11,5,10,318}, + {11,6,10,309}, + {11,7,10,299}, + {11,8,10,287}, + {11,9,10,276}, + {11,10,10,263}, + {11,11,11,513}, + {11,12,11,375}, + {11,13,11,368}, + {11,14,11,362}, + {11,15,8,6}, + {12,0,11,648}, + {12,1,10,322}, + {12,2,10,316}, + {12,3,10,312}, + {12,4,10,307}, + {12,5,10,302}, + {12,6,10,292}, + {12,7,10,284}, + {12,8,10,269}, + {12,9,10,261}, + {12,10,11,512}, + {12,11,11,376}, + {12,12,11,370}, + {12,13,11,364}, + {12,14,11,359}, + {12,15,8,4}, + {13,0,11,620}, + {13,1,10,300}, + {13,2,10,296}, + {13,3,10,294}, + {13,4,10,288}, + {13,5,10,282}, + {13,6,10,273}, + {13,7,10,266}, + {13,8,11,515}, + {13,9,11,380}, + {13,10,11,374}, + {13,11,11,369}, + {13,12,11,365}, + {13,13,11,361}, + {13,14,11,357}, + {13,15,8,2}, + {14,0,12,1033}, + {14,1,10,280}, + {14,2,10,278}, + {14,3,10,274}, + {14,4,10,267}, + {14,5,10,264}, + {14,6,10,259}, + {14,7,11,382}, + {14,8,11,378}, + {14,9,11,372}, + {14,10,11,367}, + {14,11,11,363}, + {14,12,11,360}, + {14,13,11,358}, + {14,14,11,356}, + {14,15,8,0}, + {15,0,8,43}, + {15,1,7,20}, + {15,2,7,19}, + {15,3,7,17}, + {15,4,7,15}, + {15,5,7,13}, + {15,6,7,11}, + {15,7,7,9}, + {15,8,7,7}, + {15,9,7,6}, + {15,10,7,4}, + {15,11,8,7}, + {15,12,8,5}, + {15,13,8,3}, + {15,14,8,1}, + {15,15,4,3}, + }, { // 27 + {0,0,4,15}, + {0,1,4,13}, + {0,2,6,46}, + {0,3,7,80}, + {0,4,8,146}, + {0,5,9,262}, + {0,6,9,248}, + {0,7,10,434}, + {0,8,10,426}, + {0,9,11,669}, + {0,10,11,653}, + {0,11,11,649}, + {0,12,11,621}, + {0,13,11,517}, + {0,14,12,1032}, + {0,15,9,88}, + {1,0,4,14}, + {1,1,4,12}, + {1,2,5,21}, + {1,3,6,38}, + {1,4,7,71}, + {1,5,8,130}, + {1,6,8,122}, + {1,7,9,216}, + {1,8,9,209}, + {1,9,9,198}, + {1,10,10,327}, + {1,11,10,345}, + {1,12,10,319}, + {1,13,10,297}, + {1,14,10,279}, + {1,15,8,42}, + {2,0,6,47}, + {2,1,5,22}, + {2,2,6,41}, + {2,3,7,74}, + {2,4,7,68}, + {2,5,8,128}, + {2,6,8,120}, + {2,7,9,221}, + {2,8,9,207}, + {2,9,9,194}, + {2,10,9,182}, + {2,11,10,340}, + {2,12,10,315}, + {2,13,10,295}, + {2,14,11,541}, + {2,15,7,18}, + {3,0,7,81}, + {3,1,6,39}, + {3,2,7,75}, + {3,3,7,70}, + {3,4,8,134}, + {3,5,8,125}, + {3,6,8,116}, + {3,7,9,220}, + {3,8,9,204}, + {3,9,9,190}, + {3,10,9,178}, + {3,11,10,325}, + {3,12,10,311}, + {3,13,10,293}, + {3,14,10,271}, + {3,15,7,16}, + {4,0,8,147}, + {4,1,7,72}, + {4,2,7,69}, + {4,3,8,135}, + {4,4,8,127}, + {4,5,8,118}, + {4,6,8,112}, + {4,7,9,210}, + {4,8,9,200}, + {4,9,9,188}, + {4,10,10,352}, + {4,11,10,323}, + {4,12,10,306}, + {4,13,10,285}, + {4,14,11,540}, + {4,15,7,14}, + {5,0,9,263}, + {5,1,7,66}, + {5,2,8,129}, + {5,3,8,126}, + {5,4,8,119}, + {5,5,8,114}, + {5,6,9,214}, + {5,7,9,202}, + {5,8,9,192}, + {5,9,9,180}, + {5,10,10,341}, + {5,11,10,317}, + {5,12,10,301}, + {5,13,10,281}, + {5,14,10,262}, + {5,15,7,12}, + {6,0,9,249}, + {6,1,8,123}, + {6,2,8,121}, + {6,3,8,117}, + {6,4,8,113}, + {6,5,9,215}, + {6,6,9,206}, + {6,7,9,195}, + {6,8,9,185}, + {6,9,10,347}, + {6,10,10,330}, + {6,11,10,308}, + {6,12,10,291}, + {6,13,10,272}, + {6,14,11,520}, + {6,15,7,10}, + {7,0,10,435}, + {7,1,8,115}, + {7,2,8,111}, + {7,3,8,109}, + {7,4,9,211}, + {7,5,9,203}, + {7,6,9,196}, + {7,7,9,187}, + {7,8,10,353}, + {7,9,10,332}, + {7,10,10,313}, + {7,11,10,298}, + {7,12,10,283}, + {7,13,11,531}, + {7,14,11,381}, + {7,15,8,17}, + {8,0,10,427}, + {8,1,9,212}, + {8,2,9,208}, + {8,3,9,205}, + {8,4,9,201}, + {8,5,9,193}, + {8,6,9,186}, + {8,7,9,177}, + {8,8,9,169}, + {8,9,10,320}, + {8,10,10,303}, + {8,11,10,286}, + {8,12,10,268}, + {8,13,11,514}, + {8,14,11,377}, + {8,15,8,16}, + {9,0,10,335}, + {9,1,9,199}, + {9,2,9,197}, + {9,3,9,191}, + {9,4,9,189}, + {9,5,9,181}, + {9,6,9,174}, + {9,7,10,333}, + {9,8,10,321}, + {9,9,10,305}, + {9,10,10,289}, + {9,11,10,275}, + {9,12,11,521}, + {9,13,11,379}, + {9,14,11,371}, + {9,15,8,11}, + {10,0,11,668}, + {10,1,9,184}, + {10,2,9,183}, + {10,3,9,179}, + {10,4,9,175}, + {10,5,10,344}, + {10,6,10,331}, + {10,7,10,314}, + {10,8,10,304}, + {10,9,10,290}, + {10,10,10,277}, + {10,11,11,530}, + {10,12,11,383}, + {10,13,11,373}, + {10,14,11,366}, + {10,15,8,10}, + {11,0,11,652}, + {11,1,10,346}, + {11,2,9,171}, + {11,3,9,168}, + {11,4,9,164}, + {11,5,10,318}, + {11,6,10,309}, + {11,7,10,299}, + {11,8,10,287}, + {11,9,10,276}, + {11,10,10,263}, + {11,11,11,513}, + {11,12,11,375}, + {11,13,11,368}, + {11,14,11,362}, + {11,15,8,6}, + {12,0,11,648}, + {12,1,10,322}, + {12,2,10,316}, + {12,3,10,312}, + {12,4,10,307}, + {12,5,10,302}, + {12,6,10,292}, + {12,7,10,284}, + {12,8,10,269}, + {12,9,10,261}, + {12,10,11,512}, + {12,11,11,376}, + {12,12,11,370}, + {12,13,11,364}, + {12,14,11,359}, + {12,15,8,4}, + {13,0,11,620}, + {13,1,10,300}, + {13,2,10,296}, + {13,3,10,294}, + {13,4,10,288}, + {13,5,10,282}, + {13,6,10,273}, + {13,7,10,266}, + {13,8,11,515}, + {13,9,11,380}, + {13,10,11,374}, + {13,11,11,369}, + {13,12,11,365}, + {13,13,11,361}, + {13,14,11,357}, + {13,15,8,2}, + {14,0,12,1033}, + {14,1,10,280}, + {14,2,10,278}, + {14,3,10,274}, + {14,4,10,267}, + {14,5,10,264}, + {14,6,10,259}, + {14,7,11,382}, + {14,8,11,378}, + {14,9,11,372}, + {14,10,11,367}, + {14,11,11,363}, + {14,12,11,360}, + {14,13,11,358}, + {14,14,11,356}, + {14,15,8,0}, + {15,0,8,43}, + {15,1,7,20}, + {15,2,7,19}, + {15,3,7,17}, + {15,4,7,15}, + {15,5,7,13}, + {15,6,7,11}, + {15,7,7,9}, + {15,8,7,7}, + {15,9,7,6}, + {15,10,7,4}, + {15,11,8,7}, + {15,12,8,5}, + {15,13,8,3}, + {15,14,8,1}, + {15,15,4,3}, + }, { // 28 + {0,0,4,15}, + {0,1,4,13}, + {0,2,6,46}, + {0,3,7,80}, + {0,4,8,146}, + {0,5,9,262}, + {0,6,9,248}, + {0,7,10,434}, + {0,8,10,426}, + {0,9,11,669}, + {0,10,11,653}, + {0,11,11,649}, + {0,12,11,621}, + {0,13,11,517}, + {0,14,12,1032}, + {0,15,9,88}, + {1,0,4,14}, + {1,1,4,12}, + {1,2,5,21}, + {1,3,6,38}, + {1,4,7,71}, + {1,5,8,130}, + {1,6,8,122}, + {1,7,9,216}, + {1,8,9,209}, + {1,9,9,198}, + {1,10,10,327}, + {1,11,10,345}, + {1,12,10,319}, + {1,13,10,297}, + {1,14,10,279}, + {1,15,8,42}, + {2,0,6,47}, + {2,1,5,22}, + {2,2,6,41}, + {2,3,7,74}, + {2,4,7,68}, + {2,5,8,128}, + {2,6,8,120}, + {2,7,9,221}, + {2,8,9,207}, + {2,9,9,194}, + {2,10,9,182}, + {2,11,10,340}, + {2,12,10,315}, + {2,13,10,295}, + {2,14,11,541}, + {2,15,7,18}, + {3,0,7,81}, + {3,1,6,39}, + {3,2,7,75}, + {3,3,7,70}, + {3,4,8,134}, + {3,5,8,125}, + {3,6,8,116}, + {3,7,9,220}, + {3,8,9,204}, + {3,9,9,190}, + {3,10,9,178}, + {3,11,10,325}, + {3,12,10,311}, + {3,13,10,293}, + {3,14,10,271}, + {3,15,7,16}, + {4,0,8,147}, + {4,1,7,72}, + {4,2,7,69}, + {4,3,8,135}, + {4,4,8,127}, + {4,5,8,118}, + {4,6,8,112}, + {4,7,9,210}, + {4,8,9,200}, + {4,9,9,188}, + {4,10,10,352}, + {4,11,10,323}, + {4,12,10,306}, + {4,13,10,285}, + {4,14,11,540}, + {4,15,7,14}, + {5,0,9,263}, + {5,1,7,66}, + {5,2,8,129}, + {5,3,8,126}, + {5,4,8,119}, + {5,5,8,114}, + {5,6,9,214}, + {5,7,9,202}, + {5,8,9,192}, + {5,9,9,180}, + {5,10,10,341}, + {5,11,10,317}, + {5,12,10,301}, + {5,13,10,281}, + {5,14,10,262}, + {5,15,7,12}, + {6,0,9,249}, + {6,1,8,123}, + {6,2,8,121}, + {6,3,8,117}, + {6,4,8,113}, + {6,5,9,215}, + {6,6,9,206}, + {6,7,9,195}, + {6,8,9,185}, + {6,9,10,347}, + {6,10,10,330}, + {6,11,10,308}, + {6,12,10,291}, + {6,13,10,272}, + {6,14,11,520}, + {6,15,7,10}, + {7,0,10,435}, + {7,1,8,115}, + {7,2,8,111}, + {7,3,8,109}, + {7,4,9,211}, + {7,5,9,203}, + {7,6,9,196}, + {7,7,9,187}, + {7,8,10,353}, + {7,9,10,332}, + {7,10,10,313}, + {7,11,10,298}, + {7,12,10,283}, + {7,13,11,531}, + {7,14,11,381}, + {7,15,8,17}, + {8,0,10,427}, + {8,1,9,212}, + {8,2,9,208}, + {8,3,9,205}, + {8,4,9,201}, + {8,5,9,193}, + {8,6,9,186}, + {8,7,9,177}, + {8,8,9,169}, + {8,9,10,320}, + {8,10,10,303}, + {8,11,10,286}, + {8,12,10,268}, + {8,13,11,514}, + {8,14,11,377}, + {8,15,8,16}, + {9,0,10,335}, + {9,1,9,199}, + {9,2,9,197}, + {9,3,9,191}, + {9,4,9,189}, + {9,5,9,181}, + {9,6,9,174}, + {9,7,10,333}, + {9,8,10,321}, + {9,9,10,305}, + {9,10,10,289}, + {9,11,10,275}, + {9,12,11,521}, + {9,13,11,379}, + {9,14,11,371}, + {9,15,8,11}, + {10,0,11,668}, + {10,1,9,184}, + {10,2,9,183}, + {10,3,9,179}, + {10,4,9,175}, + {10,5,10,344}, + {10,6,10,331}, + {10,7,10,314}, + {10,8,10,304}, + {10,9,10,290}, + {10,10,10,277}, + {10,11,11,530}, + {10,12,11,383}, + {10,13,11,373}, + {10,14,11,366}, + {10,15,8,10}, + {11,0,11,652}, + {11,1,10,346}, + {11,2,9,171}, + {11,3,9,168}, + {11,4,9,164}, + {11,5,10,318}, + {11,6,10,309}, + {11,7,10,299}, + {11,8,10,287}, + {11,9,10,276}, + {11,10,10,263}, + {11,11,11,513}, + {11,12,11,375}, + {11,13,11,368}, + {11,14,11,362}, + {11,15,8,6}, + {12,0,11,648}, + {12,1,10,322}, + {12,2,10,316}, + {12,3,10,312}, + {12,4,10,307}, + {12,5,10,302}, + {12,6,10,292}, + {12,7,10,284}, + {12,8,10,269}, + {12,9,10,261}, + {12,10,11,512}, + {12,11,11,376}, + {12,12,11,370}, + {12,13,11,364}, + {12,14,11,359}, + {12,15,8,4}, + {13,0,11,620}, + {13,1,10,300}, + {13,2,10,296}, + {13,3,10,294}, + {13,4,10,288}, + {13,5,10,282}, + {13,6,10,273}, + {13,7,10,266}, + {13,8,11,515}, + {13,9,11,380}, + {13,10,11,374}, + {13,11,11,369}, + {13,12,11,365}, + {13,13,11,361}, + {13,14,11,357}, + {13,15,8,2}, + {14,0,12,1033}, + {14,1,10,280}, + {14,2,10,278}, + {14,3,10,274}, + {14,4,10,267}, + {14,5,10,264}, + {14,6,10,259}, + {14,7,11,382}, + {14,8,11,378}, + {14,9,11,372}, + {14,10,11,367}, + {14,11,11,363}, + {14,12,11,360}, + {14,13,11,358}, + {14,14,11,356}, + {14,15,8,0}, + {15,0,8,43}, + {15,1,7,20}, + {15,2,7,19}, + {15,3,7,17}, + {15,4,7,15}, + {15,5,7,13}, + {15,6,7,11}, + {15,7,7,9}, + {15,8,7,7}, + {15,9,7,6}, + {15,10,7,4}, + {15,11,8,7}, + {15,12,8,5}, + {15,13,8,3}, + {15,14,8,1}, + {15,15,4,3}, + }, { // 29 + {0,0,4,15}, + {0,1,4,13}, + {0,2,6,46}, + {0,3,7,80}, + {0,4,8,146}, + {0,5,9,262}, + {0,6,9,248}, + {0,7,10,434}, + {0,8,10,426}, + {0,9,11,669}, + {0,10,11,653}, + {0,11,11,649}, + {0,12,11,621}, + {0,13,11,517}, + {0,14,12,1032}, + {0,15,9,88}, + {1,0,4,14}, + {1,1,4,12}, + {1,2,5,21}, + {1,3,6,38}, + {1,4,7,71}, + {1,5,8,130}, + {1,6,8,122}, + {1,7,9,216}, + {1,8,9,209}, + {1,9,9,198}, + {1,10,10,327}, + {1,11,10,345}, + {1,12,10,319}, + {1,13,10,297}, + {1,14,10,279}, + {1,15,8,42}, + {2,0,6,47}, + {2,1,5,22}, + {2,2,6,41}, + {2,3,7,74}, + {2,4,7,68}, + {2,5,8,128}, + {2,6,8,120}, + {2,7,9,221}, + {2,8,9,207}, + {2,9,9,194}, + {2,10,9,182}, + {2,11,10,340}, + {2,12,10,315}, + {2,13,10,295}, + {2,14,11,541}, + {2,15,7,18}, + {3,0,7,81}, + {3,1,6,39}, + {3,2,7,75}, + {3,3,7,70}, + {3,4,8,134}, + {3,5,8,125}, + {3,6,8,116}, + {3,7,9,220}, + {3,8,9,204}, + {3,9,9,190}, + {3,10,9,178}, + {3,11,10,325}, + {3,12,10,311}, + {3,13,10,293}, + {3,14,10,271}, + {3,15,7,16}, + {4,0,8,147}, + {4,1,7,72}, + {4,2,7,69}, + {4,3,8,135}, + {4,4,8,127}, + {4,5,8,118}, + {4,6,8,112}, + {4,7,9,210}, + {4,8,9,200}, + {4,9,9,188}, + {4,10,10,352}, + {4,11,10,323}, + {4,12,10,306}, + {4,13,10,285}, + {4,14,11,540}, + {4,15,7,14}, + {5,0,9,263}, + {5,1,7,66}, + {5,2,8,129}, + {5,3,8,126}, + {5,4,8,119}, + {5,5,8,114}, + {5,6,9,214}, + {5,7,9,202}, + {5,8,9,192}, + {5,9,9,180}, + {5,10,10,341}, + {5,11,10,317}, + {5,12,10,301}, + {5,13,10,281}, + {5,14,10,262}, + {5,15,7,12}, + {6,0,9,249}, + {6,1,8,123}, + {6,2,8,121}, + {6,3,8,117}, + {6,4,8,113}, + {6,5,9,215}, + {6,6,9,206}, + {6,7,9,195}, + {6,8,9,185}, + {6,9,10,347}, + {6,10,10,330}, + {6,11,10,308}, + {6,12,10,291}, + {6,13,10,272}, + {6,14,11,520}, + {6,15,7,10}, + {7,0,10,435}, + {7,1,8,115}, + {7,2,8,111}, + {7,3,8,109}, + {7,4,9,211}, + {7,5,9,203}, + {7,6,9,196}, + {7,7,9,187}, + {7,8,10,353}, + {7,9,10,332}, + {7,10,10,313}, + {7,11,10,298}, + {7,12,10,283}, + {7,13,11,531}, + {7,14,11,381}, + {7,15,8,17}, + {8,0,10,427}, + {8,1,9,212}, + {8,2,9,208}, + {8,3,9,205}, + {8,4,9,201}, + {8,5,9,193}, + {8,6,9,186}, + {8,7,9,177}, + {8,8,9,169}, + {8,9,10,320}, + {8,10,10,303}, + {8,11,10,286}, + {8,12,10,268}, + {8,13,11,514}, + {8,14,11,377}, + {8,15,8,16}, + {9,0,10,335}, + {9,1,9,199}, + {9,2,9,197}, + {9,3,9,191}, + {9,4,9,189}, + {9,5,9,181}, + {9,6,9,174}, + {9,7,10,333}, + {9,8,10,321}, + {9,9,10,305}, + {9,10,10,289}, + {9,11,10,275}, + {9,12,11,521}, + {9,13,11,379}, + {9,14,11,371}, + {9,15,8,11}, + {10,0,11,668}, + {10,1,9,184}, + {10,2,9,183}, + {10,3,9,179}, + {10,4,9,175}, + {10,5,10,344}, + {10,6,10,331}, + {10,7,10,314}, + {10,8,10,304}, + {10,9,10,290}, + {10,10,10,277}, + {10,11,11,530}, + {10,12,11,383}, + {10,13,11,373}, + {10,14,11,366}, + {10,15,8,10}, + {11,0,11,652}, + {11,1,10,346}, + {11,2,9,171}, + {11,3,9,168}, + {11,4,9,164}, + {11,5,10,318}, + {11,6,10,309}, + {11,7,10,299}, + {11,8,10,287}, + {11,9,10,276}, + {11,10,10,263}, + {11,11,11,513}, + {11,12,11,375}, + {11,13,11,368}, + {11,14,11,362}, + {11,15,8,6}, + {12,0,11,648}, + {12,1,10,322}, + {12,2,10,316}, + {12,3,10,312}, + {12,4,10,307}, + {12,5,10,302}, + {12,6,10,292}, + {12,7,10,284}, + {12,8,10,269}, + {12,9,10,261}, + {12,10,11,512}, + {12,11,11,376}, + {12,12,11,370}, + {12,13,11,364}, + {12,14,11,359}, + {12,15,8,4}, + {13,0,11,620}, + {13,1,10,300}, + {13,2,10,296}, + {13,3,10,294}, + {13,4,10,288}, + {13,5,10,282}, + {13,6,10,273}, + {13,7,10,266}, + {13,8,11,515}, + {13,9,11,380}, + {13,10,11,374}, + {13,11,11,369}, + {13,12,11,365}, + {13,13,11,361}, + {13,14,11,357}, + {13,15,8,2}, + {14,0,12,1033}, + {14,1,10,280}, + {14,2,10,278}, + {14,3,10,274}, + {14,4,10,267}, + {14,5,10,264}, + {14,6,10,259}, + {14,7,11,382}, + {14,8,11,378}, + {14,9,11,372}, + {14,10,11,367}, + {14,11,11,363}, + {14,12,11,360}, + {14,13,11,358}, + {14,14,11,356}, + {14,15,8,0}, + {15,0,8,43}, + {15,1,7,20}, + {15,2,7,19}, + {15,3,7,17}, + {15,4,7,15}, + {15,5,7,13}, + {15,6,7,11}, + {15,7,7,9}, + {15,8,7,7}, + {15,9,7,6}, + {15,10,7,4}, + {15,11,8,7}, + {15,12,8,5}, + {15,13,8,3}, + {15,14,8,1}, + {15,15,4,3}, + }, { // 30 + {0,0,4,15}, + {0,1,4,13}, + {0,2,6,46}, + {0,3,7,80}, + {0,4,8,146}, + {0,5,9,262}, + {0,6,9,248}, + {0,7,10,434}, + {0,8,10,426}, + {0,9,11,669}, + {0,10,11,653}, + {0,11,11,649}, + {0,12,11,621}, + {0,13,11,517}, + {0,14,12,1032}, + {0,15,9,88}, + {1,0,4,14}, + {1,1,4,12}, + {1,2,5,21}, + {1,3,6,38}, + {1,4,7,71}, + {1,5,8,130}, + {1,6,8,122}, + {1,7,9,216}, + {1,8,9,209}, + {1,9,9,198}, + {1,10,10,327}, + {1,11,10,345}, + {1,12,10,319}, + {1,13,10,297}, + {1,14,10,279}, + {1,15,8,42}, + {2,0,6,47}, + {2,1,5,22}, + {2,2,6,41}, + {2,3,7,74}, + {2,4,7,68}, + {2,5,8,128}, + {2,6,8,120}, + {2,7,9,221}, + {2,8,9,207}, + {2,9,9,194}, + {2,10,9,182}, + {2,11,10,340}, + {2,12,10,315}, + {2,13,10,295}, + {2,14,11,541}, + {2,15,7,18}, + {3,0,7,81}, + {3,1,6,39}, + {3,2,7,75}, + {3,3,7,70}, + {3,4,8,134}, + {3,5,8,125}, + {3,6,8,116}, + {3,7,9,220}, + {3,8,9,204}, + {3,9,9,190}, + {3,10,9,178}, + {3,11,10,325}, + {3,12,10,311}, + {3,13,10,293}, + {3,14,10,271}, + {3,15,7,16}, + {4,0,8,147}, + {4,1,7,72}, + {4,2,7,69}, + {4,3,8,135}, + {4,4,8,127}, + {4,5,8,118}, + {4,6,8,112}, + {4,7,9,210}, + {4,8,9,200}, + {4,9,9,188}, + {4,10,10,352}, + {4,11,10,323}, + {4,12,10,306}, + {4,13,10,285}, + {4,14,11,540}, + {4,15,7,14}, + {5,0,9,263}, + {5,1,7,66}, + {5,2,8,129}, + {5,3,8,126}, + {5,4,8,119}, + {5,5,8,114}, + {5,6,9,214}, + {5,7,9,202}, + {5,8,9,192}, + {5,9,9,180}, + {5,10,10,341}, + {5,11,10,317}, + {5,12,10,301}, + {5,13,10,281}, + {5,14,10,262}, + {5,15,7,12}, + {6,0,9,249}, + {6,1,8,123}, + {6,2,8,121}, + {6,3,8,117}, + {6,4,8,113}, + {6,5,9,215}, + {6,6,9,206}, + {6,7,9,195}, + {6,8,9,185}, + {6,9,10,347}, + {6,10,10,330}, + {6,11,10,308}, + {6,12,10,291}, + {6,13,10,272}, + {6,14,11,520}, + {6,15,7,10}, + {7,0,10,435}, + {7,1,8,115}, + {7,2,8,111}, + {7,3,8,109}, + {7,4,9,211}, + {7,5,9,203}, + {7,6,9,196}, + {7,7,9,187}, + {7,8,10,353}, + {7,9,10,332}, + {7,10,10,313}, + {7,11,10,298}, + {7,12,10,283}, + {7,13,11,531}, + {7,14,11,381}, + {7,15,8,17}, + {8,0,10,427}, + {8,1,9,212}, + {8,2,9,208}, + {8,3,9,205}, + {8,4,9,201}, + {8,5,9,193}, + {8,6,9,186}, + {8,7,9,177}, + {8,8,9,169}, + {8,9,10,320}, + {8,10,10,303}, + {8,11,10,286}, + {8,12,10,268}, + {8,13,11,514}, + {8,14,11,377}, + {8,15,8,16}, + {9,0,10,335}, + {9,1,9,199}, + {9,2,9,197}, + {9,3,9,191}, + {9,4,9,189}, + {9,5,9,181}, + {9,6,9,174}, + {9,7,10,333}, + {9,8,10,321}, + {9,9,10,305}, + {9,10,10,289}, + {9,11,10,275}, + {9,12,11,521}, + {9,13,11,379}, + {9,14,11,371}, + {9,15,8,11}, + {10,0,11,668}, + {10,1,9,184}, + {10,2,9,183}, + {10,3,9,179}, + {10,4,9,175}, + {10,5,10,344}, + {10,6,10,331}, + {10,7,10,314}, + {10,8,10,304}, + {10,9,10,290}, + {10,10,10,277}, + {10,11,11,530}, + {10,12,11,383}, + {10,13,11,373}, + {10,14,11,366}, + {10,15,8,10}, + {11,0,11,652}, + {11,1,10,346}, + {11,2,9,171}, + {11,3,9,168}, + {11,4,9,164}, + {11,5,10,318}, + {11,6,10,309}, + {11,7,10,299}, + {11,8,10,287}, + {11,9,10,276}, + {11,10,10,263}, + {11,11,11,513}, + {11,12,11,375}, + {11,13,11,368}, + {11,14,11,362}, + {11,15,8,6}, + {12,0,11,648}, + {12,1,10,322}, + {12,2,10,316}, + {12,3,10,312}, + {12,4,10,307}, + {12,5,10,302}, + {12,6,10,292}, + {12,7,10,284}, + {12,8,10,269}, + {12,9,10,261}, + {12,10,11,512}, + {12,11,11,376}, + {12,12,11,370}, + {12,13,11,364}, + {12,14,11,359}, + {12,15,8,4}, + {13,0,11,620}, + {13,1,10,300}, + {13,2,10,296}, + {13,3,10,294}, + {13,4,10,288}, + {13,5,10,282}, + {13,6,10,273}, + {13,7,10,266}, + {13,8,11,515}, + {13,9,11,380}, + {13,10,11,374}, + {13,11,11,369}, + {13,12,11,365}, + {13,13,11,361}, + {13,14,11,357}, + {13,15,8,2}, + {14,0,12,1033}, + {14,1,10,280}, + {14,2,10,278}, + {14,3,10,274}, + {14,4,10,267}, + {14,5,10,264}, + {14,6,10,259}, + {14,7,11,382}, + {14,8,11,378}, + {14,9,11,372}, + {14,10,11,367}, + {14,11,11,363}, + {14,12,11,360}, + {14,13,11,358}, + {14,14,11,356}, + {14,15,8,0}, + {15,0,8,43}, + {15,1,7,20}, + {15,2,7,19}, + {15,3,7,17}, + {15,4,7,15}, + {15,5,7,13}, + {15,6,7,11}, + {15,7,7,9}, + {15,8,7,7}, + {15,9,7,6}, + {15,10,7,4}, + {15,11,8,7}, + {15,12,8,5}, + {15,13,8,3}, + {15,14,8,1}, + {15,15,4,3}, + }, { // 31 + {0,0,4,15}, + {0,1,4,13}, + {0,2,6,46}, + {0,3,7,80}, + {0,4,8,146}, + {0,5,9,262}, + {0,6,9,248}, + {0,7,10,434}, + {0,8,10,426}, + {0,9,11,669}, + {0,10,11,653}, + {0,11,11,649}, + {0,12,11,621}, + {0,13,11,517}, + {0,14,12,1032}, + {0,15,9,88}, + {1,0,4,14}, + {1,1,4,12}, + {1,2,5,21}, + {1,3,6,38}, + {1,4,7,71}, + {1,5,8,130}, + {1,6,8,122}, + {1,7,9,216}, + {1,8,9,209}, + {1,9,9,198}, + {1,10,10,327}, + {1,11,10,345}, + {1,12,10,319}, + {1,13,10,297}, + {1,14,10,279}, + {1,15,8,42}, + {2,0,6,47}, + {2,1,5,22}, + {2,2,6,41}, + {2,3,7,74}, + {2,4,7,68}, + {2,5,8,128}, + {2,6,8,120}, + {2,7,9,221}, + {2,8,9,207}, + {2,9,9,194}, + {2,10,9,182}, + {2,11,10,340}, + {2,12,10,315}, + {2,13,10,295}, + {2,14,11,541}, + {2,15,7,18}, + {3,0,7,81}, + {3,1,6,39}, + {3,2,7,75}, + {3,3,7,70}, + {3,4,8,134}, + {3,5,8,125}, + {3,6,8,116}, + {3,7,9,220}, + {3,8,9,204}, + {3,9,9,190}, + {3,10,9,178}, + {3,11,10,325}, + {3,12,10,311}, + {3,13,10,293}, + {3,14,10,271}, + {3,15,7,16}, + {4,0,8,147}, + {4,1,7,72}, + {4,2,7,69}, + {4,3,8,135}, + {4,4,8,127}, + {4,5,8,118}, + {4,6,8,112}, + {4,7,9,210}, + {4,8,9,200}, + {4,9,9,188}, + {4,10,10,352}, + {4,11,10,323}, + {4,12,10,306}, + {4,13,10,285}, + {4,14,11,540}, + {4,15,7,14}, + {5,0,9,263}, + {5,1,7,66}, + {5,2,8,129}, + {5,3,8,126}, + {5,4,8,119}, + {5,5,8,114}, + {5,6,9,214}, + {5,7,9,202}, + {5,8,9,192}, + {5,9,9,180}, + {5,10,10,341}, + {5,11,10,317}, + {5,12,10,301}, + {5,13,10,281}, + {5,14,10,262}, + {5,15,7,12}, + {6,0,9,249}, + {6,1,8,123}, + {6,2,8,121}, + {6,3,8,117}, + {6,4,8,113}, + {6,5,9,215}, + {6,6,9,206}, + {6,7,9,195}, + {6,8,9,185}, + {6,9,10,347}, + {6,10,10,330}, + {6,11,10,308}, + {6,12,10,291}, + {6,13,10,272}, + {6,14,11,520}, + {6,15,7,10}, + {7,0,10,435}, + {7,1,8,115}, + {7,2,8,111}, + {7,3,8,109}, + {7,4,9,211}, + {7,5,9,203}, + {7,6,9,196}, + {7,7,9,187}, + {7,8,10,353}, + {7,9,10,332}, + {7,10,10,313}, + {7,11,10,298}, + {7,12,10,283}, + {7,13,11,531}, + {7,14,11,381}, + {7,15,8,17}, + {8,0,10,427}, + {8,1,9,212}, + {8,2,9,208}, + {8,3,9,205}, + {8,4,9,201}, + {8,5,9,193}, + {8,6,9,186}, + {8,7,9,177}, + {8,8,9,169}, + {8,9,10,320}, + {8,10,10,303}, + {8,11,10,286}, + {8,12,10,268}, + {8,13,11,514}, + {8,14,11,377}, + {8,15,8,16}, + {9,0,10,335}, + {9,1,9,199}, + {9,2,9,197}, + {9,3,9,191}, + {9,4,9,189}, + {9,5,9,181}, + {9,6,9,174}, + {9,7,10,333}, + {9,8,10,321}, + {9,9,10,305}, + {9,10,10,289}, + {9,11,10,275}, + {9,12,11,521}, + {9,13,11,379}, + {9,14,11,371}, + {9,15,8,11}, + {10,0,11,668}, + {10,1,9,184}, + {10,2,9,183}, + {10,3,9,179}, + {10,4,9,175}, + {10,5,10,344}, + {10,6,10,331}, + {10,7,10,314}, + {10,8,10,304}, + {10,9,10,290}, + {10,10,10,277}, + {10,11,11,530}, + {10,12,11,383}, + {10,13,11,373}, + {10,14,11,366}, + {10,15,8,10}, + {11,0,11,652}, + {11,1,10,346}, + {11,2,9,171}, + {11,3,9,168}, + {11,4,9,164}, + {11,5,10,318}, + {11,6,10,309}, + {11,7,10,299}, + {11,8,10,287}, + {11,9,10,276}, + {11,10,10,263}, + {11,11,11,513}, + {11,12,11,375}, + {11,13,11,368}, + {11,14,11,362}, + {11,15,8,6}, + {12,0,11,648}, + {12,1,10,322}, + {12,2,10,316}, + {12,3,10,312}, + {12,4,10,307}, + {12,5,10,302}, + {12,6,10,292}, + {12,7,10,284}, + {12,8,10,269}, + {12,9,10,261}, + {12,10,11,512}, + {12,11,11,376}, + {12,12,11,370}, + {12,13,11,364}, + {12,14,11,359}, + {12,15,8,4}, + {13,0,11,620}, + {13,1,10,300}, + {13,2,10,296}, + {13,3,10,294}, + {13,4,10,288}, + {13,5,10,282}, + {13,6,10,273}, + {13,7,10,266}, + {13,8,11,515}, + {13,9,11,380}, + {13,10,11,374}, + {13,11,11,369}, + {13,12,11,365}, + {13,13,11,361}, + {13,14,11,357}, + {13,15,8,2}, + {14,0,12,1033}, + {14,1,10,280}, + {14,2,10,278}, + {14,3,10,274}, + {14,4,10,267}, + {14,5,10,264}, + {14,6,10,259}, + {14,7,11,382}, + {14,8,11,378}, + {14,9,11,372}, + {14,10,11,367}, + {14,11,11,363}, + {14,12,11,360}, + {14,13,11,358}, + {14,14,11,356}, + {14,15,8,0}, + {15,0,8,43}, + {15,1,7,20}, + {15,2,7,19}, + {15,3,7,17}, + {15,4,7,15}, + {15,5,7,13}, + {15,6,7,11}, + {15,7,7,9}, + {15,8,7,7}, + {15,9,7,6}, + {15,10,7,4}, + {15,11,8,7}, + {15,12,8,5}, + {15,13,8,3}, + {15,14,8,1}, + {15,15,4,3}, + } +}; + +// first ESC table is 16 +char linbits[16] = {1, 2, 3, 4, 6, 8, 10, 13, 4, 5, 6, 7, 8, 9, 11, 13}; + +// frame data +typedef struct { + + uint32_t hdr; + + // parsed out + uint16_t bitrate; + uint16_t smprate; + uint16_t len; + + // bitflags + uint8_t prot; // crc protection - TODO add to verify_l3 + uint8_t priv; + uint8_t smpbit; + uint8_t jint; // joint stereo - intensity stereo + uint8_t jmss; // joint stereo - MS stereo (?) + + // indices + uint8_t mode; + uint8_t emph; // emphasis? + + // parsed data + int32_t crc; // negative when not present + + uint8_t dat[1018]; +} mp3_frame; + +uint32_t verify_l3(uint32_t d) { // returns 0 if header is valid + d = ntohl(d); + printf("magic %08X\n", d); + //return (d & 0xFFF00000) ^ 0xFFF00000; + return (d & 0xFFFE0000) ^ 0xFFFA0000; +} + +void rdl3(uint32_t* s, mp3_frame* m) { + uint32_t d = ntohl(*(s++)); + m->hdr = d; + m->prot = (d >> 16) & 1; + m->bitrate = l3_bitrates[(d >> 12) & 0xF]; + m->smprate = l3_smprates[(d >> 10) & 3]; + m->smpbit = (d >> 10) & 3; + m->len = 144000 * m->bitrate / m->smprate + ((d >> 9) & 1); + m->priv = (d >> 8) & 1; + m->mode = (d >> 6) & 3; + m->jmss = (d >> 5) & 1; + m->jint = (d >> 4) & 1; + m->emph = d & 3; + + m->crc = htons(*((uint16_t*)s)); // only valid if m->crc + + int bp = m->prot << 4; // bitpointer + if(m->mode) { // mono + + } +} + +int main(int argc, char** argv) { + + struct stat s; + mp3_frame m; + int fd; + + for(int f = 1; f < argc; f++) { + + uint32_t sp = 0, fc = 0; // stream ptr., frame ctr. + + if((fd = open(argv[f], O_RDWR)) < 0) continue; + fstat(fd, &s); + uint8_t* stream = malloc(s.st_size); + read(fd, stream, s.st_size); + + static char* yn[2] = {"no", "yes"}; + static char* chtyp[4] = {"stereo", "joint stereo", "dual mono (stereo)", "mono"}; + static char* emph[4] = {"none", "50/15 ms", "reserved", "CCIT J.17"}; + + printf("begin reading %s (%u bytes at %p)\n", argv[f], s.st_size, stream); + + while(!verify_l3(*(uint32_t*)(stream + sp))) { + printf("frame %u sync at %u (%X)!\n", fc, sp, sp); + rdl3((uint32_t*)(stream + sp), &m); + printf( + "\tprotected:\t%s\n" + "\tbitrate:\t%ukbps\n" + "\tsamplerate:\t%uhz\n" + "\tframe length:\t%u bytes\n" + "\tprivate bit:\t%u\n" + "\tchannel type:\t%s\n" + "\tMS stereo:\t%s\n" + "\tint. stereo:\t%s\n" + "\temphasis:\t%s\n", + yn[m.prot], + m.bitrate, + m.smprate, + m.len, + m.priv, + chtyp[m.mode], + yn[m.jmss], + yn[m.jint], + emph[m.emph] + ); + sp += m.len; + fc++; + } + } +}