Created
July 8, 2021 12:16
-
-
Save cinquemb/c0108f249ed76faaa92d2de7fac3ec9d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <fstream> | |
#include <vector> | |
#include <string> | |
#include <cstdint> | |
#include <map> | |
const int buff_size = 8; | |
// clang++ -fcolor-diagnostics fib_encoding.cpp -o fib -Wall -O3 -std=gnu++14 -stdlib=libc++ -pedantic -I/usr/local/include | |
// Lookup table of Fibonacci numbers that can fit in a ulong. | |
const static std::vector<uint64_t> fibLookup{ | |
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, | |
46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, | |
24157817, 39088169, 63245986, 102334155, 165580141, 267914296, 433494437, 701408733, 1134903170, 1836311903, | |
2971215073, 4807526976, 7778742049, 12586269025, 20365011074, 32951280099, 53316291173, 86267571272, | |
139583862445, 225851433717, 365435296162, 591286729879, 956722026041, 1548008755920, 2504730781961, | |
4052739537881, 6557470319842, 10610209857723, 17167680177565, 27777890035288, 44945570212853, | |
72723460248141, 117669030460994, 190392490709135, 308061521170129, 498454011879264, 806515533049393, | |
1304969544928657, 2111485077978050, 3416454622906707, 5527939700884757, 8944394323791464, 14472334024676221, | |
23416728348467685, 37889062373143906, 61305790721611591, 99194853094755497, 160500643816367088, | |
259695496911122585, 420196140727489673, 679891637638612258, 1100087778366101931, 1779979416004714189, | |
2880067194370816120, 4660046610375530309, 7540113804746346429, 12200160415121876738ULL | |
}; | |
//https://stackoverflow.com/questions/3543783/what-is-the-c-analog-of-c-sharp-byte c# byte -> c++ uint8_t | |
//https://github.com/invertedtomato/integer-compression | |
/// The most significant bit in a byte. | |
//const unsigned char fibMSB = 0x8000; //8 bytes -> 128 or 0x80, 16 bytes -> 32768 or 0x8000 | |
/// Maximum possible length of an encoded symbol. | |
const int MAX_ENCODED_LENGTH = buff_size; | |
void fib_encode_many(std::vector<unsigned short>& values, std::string prefix, int offset=0, int count=0) { | |
std::ofstream stream("instructions.bin."+prefix+".fib", std::ios::binary); | |
uint8_t buffer[MAX_ENCODED_LENGTH]; | |
int bitOffset = 0; | |
// need to initialize inorder to avoid weird bit flipping behavoir | |
for (int i=0; i< MAX_ENCODED_LENGTH; i++){ | |
buffer[i] = (uint8_t)0; | |
} | |
// Iterate through all symbols | |
for (int valueIdx = offset; valueIdx < offset + count; valueIdx++) { | |
unsigned short value = values[valueIdx]; | |
int residualBits = 0; | |
// Reset size for next symbol | |
int maxByte = -1; | |
// Fibonacci doesn't support 0s, so add 1 to allow for them | |
value++; | |
// #1 Find the largest Fibonacci number equal to or less than N; subtract this number from N, keeping track of the remainder. | |
// #3 Repeat the previous steps, substituting the remainder for N, until a remainder of 0 is reached. | |
for (int fibIdx = fibLookup.size() - 1; fibIdx >= 0; fibIdx--) { | |
// #2 If the number subtracted was the ith Fibonacci number F(i), put a 1 in place i−2 in the code word (counting the left most digit as place 0). | |
if (value >= fibLookup[fibIdx]) { | |
// Calculate offsets | |
int adjustedIdx = fibIdx + bitOffset; | |
int byteIdx = adjustedIdx / buff_size; | |
int bitIdx = adjustedIdx % buff_size; | |
// If this is the termination fib, add termination bit | |
if (-1 == maxByte) { | |
// Note parameters for this symbol | |
maxByte = (adjustedIdx + 1) / buff_size; | |
residualBits = (adjustedIdx + 2) % buff_size; // Add two bits being written | |
// Append bits to output | |
int terminationByteIdx = (adjustedIdx + 1) / buff_size; | |
int terminationBitIdx = (adjustedIdx + 1) % buff_size; | |
buffer[terminationByteIdx] |= (uint8_t)(0x01 << (buff_size - 1 - terminationBitIdx)); // Termination bit | |
} | |
// Flag that fib is used | |
buffer[byteIdx] |= (uint8_t)(0x01 << (buff_size - 1 - bitIdx)); // Flag bit | |
// Deduct Fibonacci number from value | |
value -= fibLookup[fibIdx]; | |
} | |
} | |
// Write n-1 output bytes | |
for (int j = 0; j < maxByte; j++) { | |
stream.write(reinterpret_cast<const char *>(&buffer[j]), sizeof(uint8_t)); | |
buffer[j] = 0; | |
} | |
// Write last byte if complete, or no more symbols to encode | |
if (residualBits == 0 || // No residual bits | |
valueIdx == offset + count - 1 // No more symbols to process | |
) { | |
stream.write(reinterpret_cast<const char *>(&buffer[maxByte]), sizeof(uint8_t)); | |
buffer[maxByte] = 0; | |
} else if (maxByte > 0) { | |
buffer[0] = buffer[maxByte]; | |
buffer[maxByte] = 0; | |
} | |
bitOffset = residualBits; | |
} | |
std::cout << "\t\t" << prefix << ": " <<stream.tellp() << std::endl; | |
stream.close(); | |
} | |
std::vector<unsigned short> fib_decode_many(int offset=0) { | |
// Current symbol being decoded | |
std::vector<unsigned short> values; | |
uint64_t symbol = 0; | |
// Next Fibonacci number to test | |
int nextFibIndex = 0; | |
// State of the last bit while decoding | |
bool lastBit = false; | |
/* | |
TODO: read to stringstream and decompress | |
*/ | |
std::ifstream ifd; | |
ifd.open("instructions.bin.fib", std::ios::binary | std::ios::ate); | |
int size = ifd.tellg(); | |
int total_intructions = size / sizeof (uint8_t); | |
ifd.seekg(0, std::ios::beg); | |
for (int i=0; i < total_intructions; i++) { | |
// Read byte of input, and throw error if unavailable | |
uint8_t b; | |
ifd.read(reinterpret_cast<char *>(&b), sizeof b); | |
if (b < 0) { | |
std::cout << "Input ends with a partial symbol. More bytes required to decode." << std::endl; | |
exit(0); | |
} | |
// For each bit of buffer | |
for (int bi = 0; bi < buff_size; bi++) { | |
// If bit is set... MSB == 0x8000 | |
//uint8_t b_shifted = b << 1; | |
if (((b << bi) & 0x80) > 0){ | |
// If double 1 bits | |
if (lastBit) { | |
// Remove zero offset | |
symbol--; | |
// Add to output | |
//values[pos++] = symbol; | |
/* | |
// Stop if expected number of symbols have been found | |
if (--count == 0) { | |
return values; | |
}*/ | |
if (symbol != 0) { | |
// Reset for next symbol | |
values.push_back((unsigned short) symbol); | |
symbol = 0; | |
nextFibIndex = 0; | |
} else { | |
symbol++; | |
} | |
lastBit = false; | |
continue; | |
} | |
// Add value to current symbol | |
//unsigned short pre = symbol; | |
symbol += fibLookup[nextFibIndex]; | |
// Note bit for next cycle | |
lastBit = true; | |
} else { | |
// Note bit for next cycle | |
lastBit = false; | |
} | |
// Increment bit position | |
nextFibIndex++; | |
} | |
} | |
ifd.close(); | |
return values; | |
} | |
std::string join_string(std::vector<unsigned short>& v, std::string delimiter, bool print_index=false){ | |
int vector_len = v.size(); | |
std::string ov; | |
for(int i = 0; i< vector_len; i++){ | |
if(i < vector_len-1){ | |
if (print_index) | |
ov += std::to_string(i) + ": " + std::to_string(v[i]) + delimiter; | |
else | |
ov += std::to_string(v[i]) + delimiter; | |
}else{ | |
if (print_index) | |
ov += std::to_string(i) + ": " + std::to_string(v[i]); | |
else | |
ov += std::to_string(v[i]); | |
} | |
} | |
return ov; | |
} | |
bool cmp(std::pair<int, int>& a, | |
std::pair<int, int>& b) | |
{ | |
return a.second > b.second; | |
} | |
std::vector<unsigned short> remap_data(std::map<int, int>& M, std::vector<unsigned short>& raw) { | |
fib_encode_many(raw, "raw", 0, raw.size()); | |
// Declare vector of pairs | |
std::vector<std::pair<int, int> > A; | |
// Copy key-value pair from Map | |
// to vector of pairs | |
for (auto& it : M) { | |
A.push_back(it); | |
} | |
// Sort using comparator function | |
sort(A.begin(), A.end(), cmp); | |
std::map<int, int> index_val_map; | |
// Print the sorted value | |
int index = 0; | |
for (auto& it : A) { | |
index_val_map[it.first] = index; | |
index++; | |
std::cout << it.first << ": " | |
<< it.second << std::endl; | |
} | |
std::vector<unsigned short> indexed_data; | |
for (int i=0; i<raw.size(); i++){ | |
indexed_data.push_back(index_val_map[raw[i]]); | |
} | |
std::cout <<"unique keys: " << index_val_map.size() << std::endl; | |
/* | |
TODO: need to figure out a way sort before compressing and resort | |
*/ | |
/* | |
for (auto& it : A) { | |
std::string cur_indx = std::to_string(index_val_map[it.first]); | |
std::vector<unsigned short> temp_data; | |
int skip_index = 0; | |
for (int i=0; i<indexed_data.size(); i++){ | |
if (indexed_data[i] == index_val_map[it.first]){ | |
if (skip_index > 0) | |
temp_data.push_back(skip_index); | |
skip_index = 0; | |
} else | |
skip_index++; | |
} | |
fib_encode_many_half(temp_data, "test-"+cur_indx, 0, temp_data.size()); | |
}*/ | |
fib_encode_many(indexed_data, "indexed", 0, indexed_data.size()); | |
return indexed_data; | |
} | |
int main(int argc, char *argv[]){ | |
std::vector<unsigned short> inst{667,710,16,15,9,3,8,10,3,15,9,17,2,1,8,10,17,2,6,7,15,11,17,4,13,7,13,12,3,17,4,13,8,1,4,3,15,3,8,17,1,6,7,7,7,7,4,9,15,12,7,10,2,14,15,11,9,12,12,4,13,11,5,1,3,3,1,10,2,9,10,9,4,8,2,13,9,12,9,10,4,10,17,1,13,12,12,4,13,14,8,13,14,12,7,5,13,7,10,10,11,8,5,11,5,6,7,11,6,12,12,13,4,1,10,13,3,1,2,4,5,1,11,9,4,8,10,7,4,1,3,15,17,10,1,4,2,15,13,4,17,13,4,9,3,4,7,9,4,17,1,54,10,17,8,10,1,2,2,12,14,5,10,7,13,8,13,6,5,5,1,9,1,12,11,12,6,12,11,15,6,9,17,9,2,12,13,8,8,13,10,15,14,6,4,15,6,8,7,3,9,8,11,13,7,13,8,1,8,3,15,14,8,8,11,14,9,12,10,17,14,6,1,7,17,5,3,11,6,13,9,11,7,8,12,5,4,1,10,10,9,9,8,7,1,7,8,1,14,13,9,9,3,13,17,6,14,15,5,6,2,11,8,9,3,11,13,13,14,3,13,17,6,5,10,4,9,3,7,10,8,7,14,2,10,18,1,5,15,7,15,5,8,7,5,8,3,14,17,2,11,2,11,11,12,1,12,15,12,13,3,10,14,11,3,8,4,2,11,4,12,8,5,5,8,1,4,1,17,15,7,13,9,15,3,2,7,6,11,12,12,3,10,12,18,5,1,2,11,9,17,1,295,0,16,252,1,17,10,8,3,7,10,1,2,18,8,3,2,14,4,17,10,7,8,4,6,17,13,10,7,10,9,1,8,17,10,81,8,8,32,10,17,5,6,14,8,1,15,1,7,1,11,12,12,5,5,10,6,15,15,8,3,4,5,14,6,9,2,12,17,15,8,6,14,5,11,4,8,14,17,1,11,9,9,6,12,10,13,12,18,1,6,2,2,15,11,5,14,3,6,3,11,4,2,1,15,9,3,6,8,2,15,9,3,6,7,15,17,8,8,5,3,4,6,3,17,11,8,10,18,8,3,7,10,1,2,18,8,17,8,17,11,9,3,6,2,9,6,17,8,17,6,17,4,17,5,2,3,4,8,17,1,5,6,1,18,1,17,5,7,6,19,8,17,15,13,5,11,5,17,6,1,3,6,17,9,8,17,6,1,18,2,17,6,19,3,9,6,19,15,3,15,14,6,17,8,17,6,17,4,17,5,2,3,4,8,17,1,5,6,2,20,1,1,5,7,6,19,8,17,15,13,5,11,5,17,6,18,4,3,6,1,17,6,2,19,3,15,4,5,7,6,19,3,5,6,17,14,17,1,12,8,17,6,3,7,13,8,11,11,8,6,9,1,1,6,2,19,2,1,9,5,7,8,17,6,3,10,15,9,2,17,5,8,2,1,1,6,2,19,1,2,9,5,7,8,17,6,3,12,15,17,2,3,7,7,9,1,1,6,2,20,11,13,5,7,8,18,0,16,6,3,11,13,14,7,4,13,12,3,1,1,6,2,20,8,7,5,7,8,17,6,3,13,13,14,7,4,13,12,3,1,4,6,2,19,8,4,2,5,7,8,17,6,3,14,14,10,12,10,17,9,11,1,4,6,2,19,8,5,9,5,7,8,17,6,3,15,1,11,7,12,15,4,9,1,4,6,2,19,8,7,17,5,7,8,17,6,3,15,15,11,14,3,11,7,3,1,4,6,2,19,8,8,7,5,7,6,2,19,3,15,4,5,6,5,11,8,17,6,3,12,15,17,2,3,7,7,9,1,4,6,2,19,7,15,9,5,7,8,17,6,3,13,5,3,12,6,15,5,15,1,4,6,2,19,8,17,3,5,7,8,17,6,3,13,6,17,11,3,4,7,15,1,4,6,2,19,8,1,10,5,7,8,17,6,3,13,13,6,2,14,13,3,14,1,4,6,2,19,8,3,1,5,7,6,2,19,3,15,4,5,6,5,11,8,17,6,3,11,14,14,9,9,1,1,9,1,1,6,2,20,15,15,5,7,8,17,6,3,11,14,14,9,9,1,1,9,1,4,6,2,19,7,9,13,5,7,8,17,6,3,12,3,4,14,14,14,6,5,1,4,6,2,19,7,11,4,5,7,8,17,6,3,12,9,10,15,15,7,17,12,1,4,6,2,19,7,12,11,5,7,8,17,6,3,12,11,17,15,11,12,7,1,1,4,6,2,19,7,14,2,5,7,6,2,19,3,15,4,5,6,5,11,8,17,6,3,10,15,9,2,17,5,8,2,1,4,6,2,19,4,10,11,5,7,8,17,6,3,11,5,11,7,10,1,8,4,1,4,6,2,19,7,7,12,5,7,8,17,6,3,11,12,7,5,1,3,14,2,1,4,6,2,19,7,8,6,5,7,6,2,19,3,15,4,5,6,5,11,8,17,6,3,9,7,10,5,13,5,11,5,1,1,6,2,19,1,10,13,5,7,8,17,6,3,9,15,6,14,1,11,2,6,1,1,6,2,19,1,7,7,5,7,8,17,6,3,9,15,6,14,1,11,2,6,1,4,6,2,19,7,4,4,5,7,8,17,6,3,10,5,17,12,13,8,14,7,1,4,6,2,19,7,5,11,5,7,8,17,6,3,10,6,12,4,17,9,15,1,1,4,6,2,19,7,7,2,5,7,8,17,6,3,10,9,17,5,9,12,11,11,1,4,6,2,19,4,4,11,5,7,6,2,19,3,15,4,5,6,5,11,8,17,6,3,9,7,10,5,13,5,11,5,1,4,6,2,19,6,15,5,5,7,8,17,6,3,9,10,6,4,9,14,13,12,1,4,6,2,19,7,17,12,5,7,8,17,6,3,9,11,12,2,8,18,0,16,9,15,1,17,4,6,2,19,7,1,6,5,7,8,17,6,3,9,15,1,10,17,9,2,9,1,4,6,2,19,7,2,13,5,7,6,2,19,3,15,4,5,6,5,11,8,17,6,3,8,2,5,10,13,6,17,7,1,1,6,2,19,1,14,15,5,7,8,17,6,3,8,2,5,10,13,6,17,7,1,4,6,2,19,6,11,3,5,7,8,17,6,3,8,6,12,15,9,15,1,4,1,4,6,2,19,6,12,10,5,7,8,17,6,3,9,18,12,15,17,12,15,1,4,6,2,19,6,14,1,5,7,8,17,6,3,9,5,13,8,9,11,4,1,1,4,6,2,19,6,14,11,5,7,6,2,19,3,15,4,5,6,5,11,8,17,6,3,7,13,8,11,11,8,6,9,1,4,6,2,19,6,8,8,5,7,8,17,6,3,7,13,12,17,13,1,13,17,1,4,6,2,19,6,9,15,5,7,8,17,6,3,8,1,2,9,15,12,1,12,1,4,6,2,19,6,10,9,5,7,6,2,19,3,15,4,5,6,5,11,8,17,6,3,3,10,3,14,6,12,8,1,1,1,6,2,19,3,1,5,5,7,8,17,6,3,5,1,10,13,14,11,5,7,1,1,6,2,19,2,10,9,5,7,8,17,6,3,5,13,13,2,13,10,10,1,1,1,6,2,19,2,7,3,5,7,8,17,6,3,5,13,13,2,13,10,10,1,1,4,6,2,19,6,3,9,5,7,8,17,6,3,6,4,6,6,8,17,2,2,1,4,6,2,19,6,4,3,5,7,8,17,6,3,7,17,10,17,8,2,3,1,1,4,6,2,19,6,5,10,5,7,8,17,6,3,7,6,11,2,5,6,3,7,1,4,6,2,19,6,7,1,5,7,6,2,19,3,15,4,5,6,5,11,8,17,6,3,5,1,10,13,14,11,5,7,1,4,6,2,19,5,14,8,5,7,8,17,6,3,5,1,11,15,2,1,13,8,1,4,6,2,19,6,17,1,5,7,8,17,6,3,5,2,17,10,12,11,7,6,1,4,6,2,19,6,1,8,5,7,8,17,6,3,5,12,6,17,13,10,1,11,1,4,6,2,19,6,2,15,5,7,6,2,19,3,15,4,5,6,5,11,8,17,6,3,3,15,14,8,11,10,10,6,1,1,6,2,19,2,14,11,5,7,8,17,6,3,3,15,14,8,11,10,10,6,1,4,6,2,19,5,10,4,5,7,8,17,6,3,4,4,13,9,6,14,9,5,1,4,6,2,19,5,11,11,5,7,8,17,6,3,4,10,9,6,17,2,6,1,1,4,6,2,19,5,12,5,5,7,8,17,6,3,5,17,5,3,14,4,6,1,1,4,6,2,19,0,16,19,5,9,14,5,7,6,2,19,3,15,4,5,6,5,11,8,17,6,3,3,10,3,14,6,12,8,1,1,4,6,2,19,5,4,1,5,7,8,17,6,3,3,13,12,9,17,5,12,7,1,4,6,2,19,5,5,8,5,7,8,17,6,3,3,15,11,11,10,9,10,6,1,4,6,2,19,5,7,14,5,7,6,2,19,3,15,4,5,6,5,11,8,17,6,3,1,14,13,11,12,15,6,12,1,1,6,2,19,3,8,13,5,7,8,17,6,3,2,11,5,12,13,8,9,5,1,1,6,2,19,3,6,3,5,7,8,17,6,3,2,11,5,12,13,8,9,5,1,4,6,2,19,4,14,3,5,7,8,17,6,3,2,13,7,15,2,3,11,3,1,4,6,2,19,4,15,10,5,7,8,17,6,3,3,1,3,12,14,5,6,7,1,4,6,2,19,5,1,1,5,7,8,17,6,3,3,5,3,10,4,2,17,12,1,4,6,2,19,5,2,10,5,7,6,2,19,3,15,4,5,6,5,11,8,17,6,3,1,14,13,11,12,15,6,12,1,4,6,2,19,4,10,11,5,7,8,17,6,3,2,3,11,8,7,2,13,13,1,4,6,2,19,4,11,5,5,7,8,17,6,3,2,5,11,4,3,11,17,4,1,4,6,2,19,4,12,12,5,7,6,2,19,3,15,4,5,6,5,11,8,17,6,3,17,9,5,14,10,7,11,3,1,1,6,2,19,3,12,15,5,7,8,17,6,3,17,9,5,14,10,7,11,3,1,4,6,2,19,4,4,11,5,7,8,17,6,3,1,5,14,1,4,11,15,6,1,4,6,2,19,4,7,1,5,7,8,17,6,3,1,6,15,17,1,1,5,11,1,4,6,2,19,4,8,8,5,7,8,17,6,3,1,8,1,6,17,13,13,13,1,4,6,2,19,4,10,1,5,7,6,2,19,3,15,4,5,6,5,11,8,17,6,3,17,4,9,17,3,6,17,5,1,4,6,2,19,3,15,9,5,7,8,17,6,3,17,5,4,3,13,14,7,2,1,4,6,2,19,4,2,8,5,7,8,17,6,3,17,6,15,13,13,14,17,3,1,4,6,2,19,4,3,2,5,7,5,11,6,19,8,17,15,13,5,11,6,2,19,4,1,17,6,2,19,4,17,10,3,6,6,18,4,6,2,18,1,10,10,9,5,6,5,11,6,2,19,8,9,14,5,6,5,11,6,17,4,17,5,1,6,2,19,4,1,15,9,1,9,17,6,2,18,1,13,15,4,5,6,5,11,6,17,4,17,5,1,8,17,9,1,17,3,9,17,15,3,5,11,6,2,19,4,1,17,6,2,23,0,16,8,11,6,5,6,17,11,6,2,19,4,3,12,6,2,19,9,15,12,5,6,5,11,6,17,4,17,5,1,6,2,19,4,1,15,9,1,9,17,6,2,18,1,13,9,11,5,6,5,11,6,2,19,4,6,2,6,2,19,4,5,12,3,6,6,18,4,6,2,18,1,10,7,4,5,6,5,11,6,2,19,10,2,8,5,6,5,11,6,17,4,17,5,1,6,2,19,4,1,15,9,1,9,17,6,2,18,1,13,6,11,5,6,5,11,6,2,19,4,1,17,6,2,19,4,8,2,3,6,6,18,4,6,2,18,1,9,12,17,5,6,5,11,6,2,19,10,3,1,5,6,5,11,6,2,19,4,9,2,6,2,19,10,4,15,5,6,5,11,6,17,4,17,5,1,6,2,19,4,1,15,9,1,9,17,6,2,18,1,13,2,13,5,6,5,11,6,2,19,4,1,17,6,2,19,10,5,14,5,6,5,11,6,2,19,4,1,17,6,2,19,10,6,4,5,6,5,11,6,2,19,4,6,2,6,2,19,4,12,6,3,6,6,18,4,6,2,18,1,10,2,17,5,6,5,11,6,2,19,10,6,10,5,6,5,11,6,2,19,4,1,17,6,2,19,4,13,13,3,6,6,18,4,6,2,18,1,9,12,17,5,6,5,11,6,2,19,10,7,3,5,6,5,11,6,2,19,4,1,17,6,2,19,4,15,4,3,6,6,18,4,6,2,18,1,10,7,4,5,6,5,11,6,2,19,10,9,1,5,6,5,11,6,2,19,4,1,17,6,2,19,5,17,11,3,6,6,18,4,6,2,18,1,10,10,9,5,6,5,11,6,2,19,10,11,13,5,6,5,11,6,2,19,5,1,11,6,2,19,10,13,3,5,6,5,11,6,17,4,17,5,1,6,2,19,4,1,15,9,1,9,17,6,2,18,1,14,17,4,5,6,5,11,6,2,19,4,1,17,6,2,19,5,3,11,3,6,6,18,4,6,2,18,1,9,12,17,5,6,5,11,6,2,19,10,13,8,5,6,5,11,6,2,19,4,6,2,6,2,19,5,5,2,3,6,6,18,4,6,2,18,1,9,12,17,5,6,5,11,6,2,19,10,15,6,5,6,5,11,6,2,19,5,6,15,6,2,19,5,6,9,3,6,6,18,4,6,2,18,1,10,10,9,5,6,5,11,6,2,19,11,1,3,5,6,5,11,6,17,4,17,5,1,6,2,19,4,1,15,9,1,9,17,6,2,18,1,13,14,4,21,0,16,5,6,5,11,6,2,19,5,9,5,6,2,19,5,8,15,3,6,6,18,4,6,2,18,1,9,14,1,5,6,5,11,6,2,19,11,4,3,5,6,5,11,6,17,4,17,5,1,6,2,19,4,1,15,9,1,9,17,6,2,18,1,13,8,11,5,6,5,11,6,2,19,4,9,2,6,2,19,5,11,5,3,6,6,18,4,6,2,18,1,10,10,9,5,6,5,11,6,2,19,11,7,6,5,6,5,11,6,2,19,4,1,17,6,2,19,12,4,7,5,6,5,11,6,2,19,5,13,12,6,2,19,5,13,6,3,6,6,18,4,6,2,18,1,9,12,17,5,6,5,11,6,2,19,12,4,13,5,6,5,11,18,5,11,6,2,19,4,1,17,6,2,19,12,5,11,5,6,5,11,6,2,19,5,15,2,6,2,19,12,8,4,5,6,5,11,6,17,4,17,5,1,6,2,19,4,1,15,9,1,9,17,6,2,18,1,13,7,11,5,6,5,11,6,2,19,4,1,17,6,2,19,6,1,2,3,6,6,18,4,6,2,18,1,9,12,17,5,6,5,11,6,2,19,12,9,3,5,6,5,11,6,2,19,5,6,15,6,2,19,6,2,9,3,6,6,18,4,6,2,18,1,10,10,9,5,6,5,11,6,2,19,12,11,1,5,6,5,11,6,2,19,4,9,2,6,2,19,12,14,1,5,6,5,11,6,2,19,4,1,17,6,2,19,13,17,6,5,6,5,11,6,2,19,4,1,17,6,2,19,6,5,4,3,6,6,18,4,6,2,18,1,9,12,17,5,6,5,11,6,2,19,13,17,12,5,6,5,11,6,2,19,4,1,17,6,2,19,6,6,11,3,6,6,18,4,6,2,18,1,9,12,17,5,6,5,11,6,2,19,13,2,10,5,6,5,11,6,2,19,4,1,17,6,2,19,6,8,2,3,6,6,18,4,6,2,18,1,10,10,9,5,6,5,11,6,2,19,13,4,8,5,6,5,11,6,2,19,4,1,17,6,2,19,6,9,9,3,6,6,18,4,6,2,18,1,10,10,9,5,6,5,11,6,2,19,13,5,13,5,6,5,11,6,2,19,5,15,2,6,2,19,13,7,2,5,6,5,11,6,2,19,5,13,12,6,2,19,13,8,1,5,6,5,11,6,2,19,4,1,17,6,2,19,6,12,4,3,6,6,18,4,6,2,18,1,9,12,17,5,6,5,11,6,2,19,14,3,13,5,6,5,22,0,16,11,6,2,19,4,18,6,2,19,6,13,11,3,6,6,18,4,6,2,18,1,9,12,17,5,6,5,11,6,2,19,14,9,12,5,6,5,11,6,2,19,4,1,17,6,2,19,14,11,7,5,6,5,11,6,2,19,4,3,12,6,2,19,14,11,13,5,6,5,11,6,2,19,5,9,5,6,2,19,7,17,6,3,6,6,18,4,6,2,18,1,9,12,17,5,6,5,11,6,2,19,14,13,11,5,6,5,11,6,2,19,4,1,17,6,2,19,15,4,15,5,6,5,11,6,2,19,4,1,17,6,2,19,7,2,7,3,6,6,18,4,6,2,18,1,9,12,17,5,6,5,11,6,2,19,15,5,5,5,6,5,11,6,2,19,4,1,17,6,2,19,7,3,14,3,6,6,18,4,6,2,18,1,10,10,9,5,6,5,11,6,2,19,15,7,3,5,6,5,11,6,2,19,4,1,17,6,2,19,7,5,5,3,6,6,18,4,6,2,18,1,9,14,1,5,6,5,11,6,2,19,15,8,8,5,6,5,11,6,2,19,4,1,17,6,2,19,7,6,12,3,6,6,18,4,6,2,18,1,9,12,17,5,6,5,11,6,2,19,15,11,7,5,6,5,11,6,2,19,4,1,17,6,2,19,15,14,17,5,6,5,11,6,2,19,4,1,17,6,2,18,1,17,6,5,5,6,5,11,6,2,19,4,1,17,6,2,19,7,9,7,3,6,6,18,4,6,2,18,1,10,7,4,5,6,5,11,6,2,18,1,1,13,14,5,6,5,11,6,2,19,4,1,17,6,2,19,7,10,14,3,6,6,18,4,6,2,18,1,9,12,17,5,6,5,11,6,2,18,1,2,2,6,5,6,5,11,6,2,19,4,1,17,6,2,19,7,12,5,3,6,6,18,4,6,2,18,1,10,10,9,5,6,5,11,6,2,18,1,2,4,4,5,6,5,11,6,2,19,4,1,17,6,2,19,7,13,12,3,6,6,18,4,6,2,18,1,10,10,9,5,6,5,11,6,2,18,1,2,5,9,5,6,5,11,6,2,19,5,6,15,6,2,19,7,15,3,3,6,6,18,4,6,2,18,1,10,10,9,5,6,5,11,6,2,18,1,2,6,14,5,6,5,11,6,2,19,4,1,17,6,2,18,1,2,9,14,5,6,5,11,6,2,19,5,6,15,6,2,19,8,1,4,3,6,6,18,4,6,2,18,1,10,10,9,5,6,5,11,6,2,18,1,2,23,0,16,10,4,5,6,5,11,6,2,19,4,6,2,6,2,19,8,2,11,3,6,6,18,4,6,2,18,1,9,12,17,5,6,5,11,6,2,18,1,2,13,4,5,6,5,11,6,2,19,4,1,17,6,2,19,4,5,12,3,6,6,18,4,6,2,18,1,9,14,1,5,6,5,11,6,2,19,4,1,17,6,2,19,8,5,3,3,6,6,18,4,6,2,18,1,10,10,9,5,6,5,11,6,2,18,1,2,15,5,5,6,5,11,6,2,19,5,6,15,6,2,19,8,6,10,3,6,6,18,4,6,2,18,1,10,10,9,5,6,5,11,6,2,18,1,3,17,10,5,6,5,11,6,2,19,4,1,17,6,2,19,8,8,1,3,6,6,18,4,6,2,18,1,9,12,17,5,6,5,11,6,2,18,1,3,3,10,5,6,5,11,6,2,19,4,1,17,6,2,19,8,9,8,3,6,6,18,4,6,2,18,1,10,10,9,5,6,5,11,6,2,18,1,3,5,5,5,6,5,11,6,19,8,1,8,1,5,2,6,18,12,6,17,2,17,5,2,6,17,4,17,9,17,2,17,6,17,1,10,17,1,5,4,5,11,9,1,9,17,5,17,5,6,5,11,6,19,8,17,8,17,6,2,19,8,12,4,6,2,19,13,17,6,5,6,5,11,9,17,5,17,6,19,6,2,19,8,13,2,6,2,19,14,11,7,5,6,5,11,9,17,5,17,6,19,6,2,19,8,14,17,6,2,18,1,3,6,10,5,6,5,11,6,2,19,8,15,2,8,3,8,5,6,3,15,15,15,15,15,15,15,15,6,2,18,1,3,6,15,1,6,5,6,5,11,1,1,6,2,19,8,15,15,5,7,8,1,6,2,19,9,1,11,5,6,5,11,6,2,19,9,1,11,6,2,19,9,17,13,6,2,18,1,3,6,10,5,6,5,11,8,4,9,17,6,3,15,15,15,15,15,15,15,15,6,2,18,1,3,11,3,1,6,5,6,5,11,9,17,5,17,8,2,5,11,8,1,8,1,1,17,1,5,6,2,19,9,15,1,5,7,8,17,6,19,6,2,19,9,3,6,8,2,6,2,18,1,3,14,4,5,6,5,11,8,17,5,4,9,17,9,1,5,17,6,1,17,1,18,9,18,4,6,17,15,15,1,6,1,5,6,2,19,9,14,6,5,7,6,19,6,2,19,9,5,6,8,3,6,2,19,10,11,13,5,6,5,11,9,17,5,17,6,19,5,11,8,1,8,1,1,17,1,5,6,2,19,9,14,3,5,7,6,24,0,16,19,6,2,19,9,17,2,8,5,8,3,6,2,18,1,3,15,8,5,6,5,11,9,17,5,17,6,19,6,2,19,9,8,2,8,6,8,3,6,2,18,1,4,2,2,5,6,5,11,8,17,5,4,9,17,9,1,5,17,6,1,17,1,18,9,18,4,6,17,15,15,1,6,8,17,6,2,19,9,9,14,5,7,5,17,8,17,6,18,6,17,1,5,4,8,6,1,1,5,11,8,17,6,2,19,9,11,12,5,7,5,17,8,17,6,18,4,17,1,5,4,6,2,19,9,11,10,8,3,8,3,6,18,6,17,1,5,4,6,2,18,1,1,13,14,5,6,5,11,1,17,5,11,1,5,6,2,19,9,12,10,5,7,5,17,5,17,6,2,19,9,13,10,5,6,5,11,6,18,4,17,1,5,4,9,9,9,17,9,9,17,1,9,8,5,17,6,2,19,9,14,3,5,6,5,11,6,18,1,17,1,6,2,19,9,5,11,5,6,5,11,5,17,5,17,5,11,5,17,5,17,6,18,1,17,1,6,2,19,9,1,15,5,6,5,11,5,17,9,2,9,3,5,17,5,17,5,17,5,17,5,11,9,17,5,6,5,11,6,17,4,17,8,17,5,1,8,17,8,2,17,1,9,17,9,1,5,2,6,17,1,2,8,1,5,2,7,1,7,8,2,17,5,3,6,5,7,4,2,17,4,4,6,15,6,12,6,12,6,1,7,2,2,17,5,3,7,4,6,1,6,11,6,5,6,17,7,17,1,11,6,17,2,17,8,2,17,1,5,2,9,17,5,6,5,11,6,19,5,11,9,2,9,1,5,17,5,17,5,6,5,11,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,6,19,9,17,8,1,5,2,6,18,15,6,17,2,17,5,2,6,17,4,17,9,17,2,17,6,18,1,17,1,5,4,9,17,5,6,5,11,6,18,5,5,4,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,9,17,5,6,5,11,6,19,5,4,9,17,5,6,5,11,6,18,4,5,4,9,17,5,6,5,11,6,19,9,3,9,2,5,17,5,17,5,17,5,6,5,11,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,6,19,9,17,8,1,5,2,6,18,14,6,17,2,17,5,2,6,17,4,17,9,17,2,17,6,18,4,17,1,5,4,9,17,5,6,5,11,6,18,1,6,18,1,6,17,10,17,1,11,17,3,9,1,9,17,9,1,1,6,6,19,9,17,8,1,5,2,6,18,14,6,17,2,17,9,17,8,1,5,2,6,17,4,17,8,17,8,3,2,17,9,3,8,3,5,2,6,26,0,16,17,8,9,17,9,3,17,1,9,18,2,2,17,5,4,9,17,5,6,5,11,6,19,9,17,8,1,5,2,6,18,12,6,17,2,17,8,1,9,17,5,2,6,17,4,17,9,17,9,1,2,18,1,5,4,9,17,5,6,5,11,6,17,1,2,9,17,5,6,5,11,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,6,19,9,17,8,1,5,2,6,18,15,6,17,2,17,5,2,6,17,4,17,9,17,2,17,6,18,2,17,1,5,4,9,17,5,6,5,11,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,6,19,9,17,8,1,5,2,6,18,15,6,17,2,17,5,2,6,17,4,17,9,17,2,17,5,4,1,5,1,5,9,17,5,6,5,11,6,2,19,11,1,13,6,2,18,1,9,5,7,5,6,5,11,5,17,6,19,9,17,8,1,5,2,6,18,12,6,17,2,17,9,17,8,1,5,2,6,17,4,17,9,1,8,2,9,17,2,17,8,2,5,1,9,1,8,2,17,1,9,17,9,2,5,2,6,17,1,3,9,17,9,1,17,1,5,4,8,1,5,2,9,17,5,6,5,11,6,18,1,6,18,1,6,17,10,17,1,11,17,3,8,17,8,2,1,6,6,19,9,17,8,1,5,2,6,18,15,6,17,2,17,9,17,8,1,5,2,6,17,4,17,8,17,8,3,2,17,9,3,8,6,1,6,8,3,5,2,6,18,5,9,17,9,3,17,1,9,17,5,2,2,17,5,4,6,17,15,15,1,6,9,2,9,1,5,17,5,17,5,6,5,11,6,19,8,17,6,2,19,11,8,4,8,3,6,2,18,1,3,14,4,5,6,5,11,8,17,5,4,9,17,9,1,5,17,6,1,17,1,18,9,18,4,6,17,15,15,1,6,1,5,6,2,19,12,3,6,5,7,6,19,6,2,19,11,10,4,8,4,6,2,19,10,11,13,5,6,5,11,9,17,5,17,6,19,5,11,8,1,8,1,1,17,1,5,6,2,19,12,2,14,5,7,6,19,6,2,19,11,12,17,8,6,8,3,6,2,18,1,3,15,8,5,6,5,11,9,17,5,17,6,19,6,2,19,11,13,17,8,7,8,3,6,2,18,1,4,2,2,5,6,5,11,8,17,5,4,9,17,9,1,5,17,6,1,17,1,18,9,18,4,6,17,15,15,1,6,8,17,6,2,19,11,14,12,5,7,5,17,8,17,6,18,6,17,1,5,4,8,7,1,1,5,11,8,17,6,2,19,12,17,10,5,7,5,17,8,17,6,18,4,17,1,5,4,6,2,19,12,17,8,8,3,8,3,6,28,0,16,6,17,1,5,4,6,2,18,1,1,2,14,5,6,5,11,1,17,5,11,1,5,6,2,19,12,1,8,5,7,5,17,5,17,6,2,19,12,2,5,5,6,5,11,5,17,9,3,5,17,6,2,19,8,11,1,9,2,5,17,5,17,5,17,5,6,5,11,6,18,1,17,1,6,2,19,11,10,9,5,6,5,11,5,17,5,17,6,2,19,12,4,1,5,6,5,11,6,19,9,1,5,17,5,17,6,2,19,8,11,1,5,6,5,11,5,17,9,1,9,17,5,17,5,6,5,11,6,18,1,5,4,9,17,5,6,5,11,6,2,19,12,5,8,8,1,6,2,18,1,4,4,13,5,6,5,11,5,17,5,6,5,11,6,19,6,2,19,12,6,7,6,2,18,1,9,6,10,5,6,5,11,6,2,19,12,7,1,6,2,18,1,5,4,2,5,6,5,11,9,17,5,17,6,2,19,12,7,14,8,1,6,2,18,1,5,13,7,5,6,5,11,9,1,5,17,5,17,9,17,5,6,5,11,6,18,6,5,4,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,9,17,5,6,5,11,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,6,19,9,17,8,1,5,2,6,18,14,6,17,2,17,5,2,6,17,4,17,9,17,2,17,6,18,2,17,1,5,4,9,17,5,6,5,11,6,2,19,12,11,11,6,2,18,1,9,5,7,5,6,5,11,5,17,6,19,9,17,8,1,5,2,6,18,12,6,17,2,17,9,17,8,1,5,2,6,17,4,17,9,1,8,2,9,17,2,17,8,2,5,1,9,1,8,2,17,1,9,17,9,2,5,2,6,17,1,5,9,17,9,1,17,1,5,4,8,1,5,2,9,17,5,6,5,11,7,15,3,6,17,8,9,4,10,1,3,11,10,1,10,3,2,1,17,6,6,7,12,8,2,8,4,9,2,13,11,9,8,13,12,10,3,14,2,17,7,6,12,12,3,7,3,5,10,9,2,17,10,3,12,10,5,17,5,13,3,8,2,11,11,12,5,4,9,17,5,6,5,11,6,18,11,5,4,9,17,5,6,5,11,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,6,19,9,17,8,1,5,2,6,18,15,6,17,2,17,5,2,6,17,4,17,9,17,2,17,6,18,3,17,1,5,4,9,17,5,6,5,11,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,6,19,9,17,8,1,5,2,6,18,14,6,17,2,17,5,2,6,17,4,17,9,17,2,17,6,18,1,17,1,5,4,9,17,5,6,5,11,6,19,9,17,8,1,5,2,27,0,16,6,18,12,6,17,2,17,5,2,6,19,9,17,2,17,6,18,3,17,1,5,4,9,17,5,6,5,11,6,19,9,17,8,1,5,2,6,18,12,6,17,2,17,5,2,6,17,4,17,9,17,2,17,6,17,1,1,17,1,5,4,9,17,5,6,5,11,6,18,7,5,4,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,9,17,5,6,5,11,6,2,19,13,11,15,6,2,19,13,9,3,6,2,19,8,2,11,6,2,19,12,14,1,5,6,5,11,1,5,6,9,2,8,3,2,11,9,3,6,11,4,11,9,11,9,11,4,11,7,11,7,6,17,11,1,1,11,7,2,1,17,5,11,1,12,9,9,5,8,5,9,1,14,4,8,1,10,5,11,9,10,5,13,1,10,5,8,5,11,1,10,5,14,9,9,5,9,6,17,6,10,1,11,6,2,18,1,5,15,14,5,6,5,11,6,2,19,13,13,3,6,2,19,13,12,13,6,2,19,12,14,1,5,6,5,11,6,2,18,1,6,6,1,5,6,5,11,6,19,6,2,19,13,13,15,6,2,19,12,8,4,5,6,5,11,6,19,6,17,4,17,5,1,6,2,19,13,14,15,9,17,6,2,18,1,9,8,11,5,6,5,11,6,2,19,13,15,13,9,3,9,2,9,1,9,17,6,2,18,1,13,3,13,5,6,5,11,6,17,4,17,5,1,8,17,9,1,17,3,9,17,6,19,15,17,8,17,1,5,8,17,1,5,6,2,19,14,1,10,5,7,3,13,6,19,8,17,3,14,3,13,6,19,15,13,5,11,5,17,6,18,7,8,17,5,4,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,9,1,6,6,18,1,6,18,1,6,17,10,17,1,11,17,3,9,2,9,17,9,2,1,6,9,1,9,17,9,1,1,7,9,17,5,5,5,6,5,11,6,19,8,17,6,2,19,14,4,10,6,2,19,10,5,14,5,6,5,11,9,17,5,17,8,17,6,2,19,14,5,13,5,7,6,19,9,1,5,17,5,17,6,2,19,8,11,1,5,6,5,11,6,2,19,14,9,5,8,1,6,2,19,14,8,8,6,2,19,14,7,1,8,6,6,2,19,13,2,10,5,6,5,11,6,2,19,14,7,11,6,2,19,12,4,7,5,6,5,11,9,17,6,3,15,15,15,15,15,15,15,15,6,2,18,1,6,8,8,1,6,5,6,5,11,9,17,6,3,15,15,15,15,15,15,15,15,6,2,18,1,6,12,8,1,6,5,6,5,11,9,3,9,2,5,17,5,17,5,17,5,28,0,16,6,5,11,6,18,1,6,18,1,6,19,1,11,17,3,1,6,6,19,9,17,8,1,5,2,6,18,14,6,17,2,17,5,2,6,17,4,17,9,17,2,17,5,4,9,17,5,6,5,11,6,18,10,5,4,9,17,5,6,5,11,6,17,4,17,8,17,5,1,8,17,8,2,17,1,9,17,9,1,5,2,6,18,4,8,1,5,2,6,3,7,8,5,3,4,4,5,3,6,17,14,17,1,11,6,17,2,17,8,2,17,1,5,2,9,17,5,6,5,11,6,19,8,17,6,2,19,14,14,8,6,2,19,14,11,7,5,6,5,11,6,18,1,6,18,1,6,17,10,17,1,11,17,3,8,4,1,6,6,19,9,17,8,1,5,2,6,18,14,6,17,2,17,5,2,6,17,4,17,9,17,2,17,6,18,3,17,1,5,4,9,17,9,1,5,17,8,1,1,17,1,5,6,2,19,15,1,10,5,7,6,18,2,9,1,5,17,5,17,6,2,19,8,11,1,5,6,5,11,6,18,1,6,18,1,6,17,10,17,1,11,17,3,8,3,1,6,6,19,9,17,8,1,5,2,6,18,14,6,17,2,17,5,2,6,17,4,17,9,17,2,17,6,18,2,17,1,5,4,8,1,1,17,1,5,6,2,19,15,4,6,5,7,6,19,6,2,19,14,9,5,5,6,5,11,5,17,6,18,1,9,2,9,1,5,17,5,17,5,6,5,11,6,18,3,5,4,9,17,5,6,5,11,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,6,19,9,17,8,1,5,2,6,18,14,6,17,2,17,5,2,6,17,4,17,9,17,2,17,6,18,3,17,1,5,4,9,17,5,6,5,11,6,19,9,17,8,1,5,2,6,18,12,6,17,2,17,5,2,6,17,4,17,9,17,2,17,6,18,13,17,1,5,4,9,17,5,6,5,11,6,18,1,6,18,1,6,17,10,17,1,11,17,3,9,1,8,2,1,6,6,19,9,17,8,1,5,2,6,18,14,6,17,2,17,9,17,8,1,5,2,6,17,4,17,8,17,8,3,2,17,9,3,9,17,9,4,1,6,8,2,5,2,6,18,7,9,17,9,2,17,1,9,17,9,1,5,2,2,17,5,4,9,17,5,6,5,11,6,19,6,2,19,10,2,11,6,2,19,15,12,8,8,3,6,2,19,10,13,8,5,6,5,11,6,2,19,15,13,3,8,4,6,2,19,13,17,12,5,6,5,11,9,17,6,3,15,15,15,15,15,15,15,15,6,2,18,1,3,11,3,1,6,5,6,5,11,6,19,6,2,19,15,14,12,6,2,31,0,16,17,12,8,4,5,6,5,11,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,6,3,1,8,1,6,17,13,13,13,6,17,4,17,5,1,8,1,6,3,15,15,15,15,15,15,15,15,1,6,6,17,14,17,1,11,8,1,5,2,6,18,4,17,1,6,17,2,17,6,17,4,17,5,1,8,17,8,3,17,3,8,1,8,6,8,17,3,11,1,5,8,17,1,5,6,2,18,1,17,2,5,5,7,6,19,8,17,15,13,5,11,5,17,5,10,15,10,1,5,8,17,1,5,6,2,18,1,17,3,10,5,7,3,13,6,19,8,17,3,14,3,13,6,19,15,13,5,11,5,17,5,17,5,17,5,17,6,17,4,17,5,1,3,13,6,17,1,15,1,9,6,17,1,15,8,2,17,1,1,6,8,2,17,1,8,17,6,17,4,17,5,2,5,17,6,2,18,1,17,6,17,9,1,9,17,8,1,17,1,9,17,6,2,18,1,10,12,10,5,6,5,11,9,17,5,17,9,17,5,6,5,11,6,19,8,17,6,2,18,1,17,7,2,6,2,18,1,7,17,12,5,6,5,11,9,17,5,17,6,19,6,2,18,1,17,8,17,6,2,19,14,11,7,5,6,5,11,9,17,5,17,8,17,6,2,18,1,17,9,1,5,7,5,17,9,17,5,17,6,2,19,9,15,9,5,6,5,11,6,19,6,2,18,1,17,9,13,6,2,18,1,7,1,2,5,6,5,11,8,2,1,17,6,2,18,1,17,11,4,5,7,6,2,18,1,17,10,14,6,2,18,1,7,1,2,5,6,5,11,6,2,18,1,17,11,6,5,6,5,11,8,1,5,11,9,17,5,17,6,19,8,17,5,11,8,2,8,1,1,1,6,2,18,1,1,17,15,5,7,6,18,12,6,19,6,2,18,1,17,14,13,8,3,6,2,18,1,17,14,17,8,8,6,18,1,6,3,15,15,15,15,15,15,15,15,6,2,18,1,3,6,15,1,6,5,6,5,11,9,17,6,3,15,15,15,15,15,15,15,15,6,2,18,1,3,6,15,1,6,5,6,5,11,8,1,5,2,6,17,2,17,8,1,17,1,9,1,9,17,9,1,5,2,6,17,4,18,1,6,19,2,17,6,18,3,17,1,5,4,9,1,9,17,9,1,17,1,9,17,6,18,1,17,1,6,2,18,1,17,11,12,5,6,5,11,5,17,6,19,6,18,12,8,1,6,2,18,1,1,2,8,8,6,6,18,1,6,3,15,15,15,15,15,15,15,15,6,2,18,1,3,6,15,1,6,5,6,5,11,8,1,5,2,6,17,2,18,1,9,17,8,1,5,2,6,17,2,18,1,6,19,2,30,0,16,17,6,18,1,17,1,5,4,9,17,5,17,6,2,18,1,1,6,3,6,2,18,1,1,4,10,6,2,18,1,7,1,7,5,6,5,11,6,2,18,1,1,5,6,8,4,8,6,6,2,18,1,7,3,11,5,6,5,11,9,17,6,3,15,15,15,15,15,15,15,15,6,2,18,1,7,6,14,1,6,5,6,5,11,1,5,6,2,18,1,1,10,10,5,7,8,4,6,2,18,1,1,7,13,8,2,6,18,2,6,3,15,15,15,15,15,15,15,15,6,2,18,1,6,12,8,1,6,5,6,5,11,1,17,6,2,18,1,1,8,10,5,7,8,4,6,2,18,1,1,9,13,5,6,5,11,6,2,18,1,1,9,13,8,1,6,18,2,6,3,15,15,15,15,15,15,15,15,6,2,18,1,6,12,8,1,6,5,6,5,11,9,5,5,17,5,17,5,17,5,17,5,17,5,17,6,2,19,9,15,9,5,6,5,11,8,4,6,2,18,1,1,11,14,8,2,6,18,2,6,3,15,15,15,15,15,15,15,15,6,2,18,1,6,8,8,1,6,5,6,5,11,1,17,6,2,18,1,1,12,11,5,7,8,4,6,2,18,1,1,9,13,5,6,5,11,6,2,18,1,1,9,13,8,1,6,18,2,6,3,15,15,15,15,15,15,15,15,6,2,18,1,6,8,8,1,6,5,6,5,11,6,19,6,2,18,1,1,14,11,8,2,6,2,18,1,2,5,9,5,6,5,11,6,2,18,1,1,15,9,5,7,5,17,6,19,6,2,19,10,2,11,5,6,5,11,5,17,6,18,1,6,18,1,6,17,10,17,1,11,17,3,9,1,9,17,9,1,1,6,6,19,9,17,8,1,5,2,6,18,14,6,17,2,17,9,17,8,1,5,2,6,17,4,17,8,17,8,3,2,17,9,3,8,3,5,2,6,18,6,9,17,9,3,17,1,9,17,5,2,2,17,5,4,9,17,5,6,5,11,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,6,19,9,17,8,1,5,2,6,18,14,6,17,2,17,5,2,6,17,4,17,9,17,2,17,6,18,5,17,1,5,4,9,17,5,6,5,11,6,19,9,17,8,1,5,2,6,18,12,6,17,2,17,5,2,6,17,4,17,9,17,2,17,6,17,1,18,1,5,4,9,17,5,6,5,11,6,19,9,17,8,1,5,2,6,18,12,6,17,2,17,5,2,6,17,4,17,9,17,2,17,6,18,4,17,1,5,4,9,17,5,6,5,11,6,2,18,1,2,7,8,6,2,18,1,9,5,7,5,6,5,11,5,17,6,19,9,17,8,1,5,2,6,18,12,6,17,2,17,9,32,0,16,8,1,5,2,6,17,4,17,9,1,8,2,9,17,2,17,8,2,5,1,9,1,8,2,17,1,9,17,9,2,5,2,6,17,1,6,9,17,9,1,17,1,5,4,8,1,5,2,9,17,5,6,5,11,6,18,2,5,4,9,17,5,6,5,11,6,2,18,1,2,10,14,6,2,18,1,9,5,7,5,6,5,11,5,17,6,19,9,17,8,1,5,2,6,18,12,6,17,2,17,9,17,8,1,5,2,6,17,4,17,9,1,8,2,9,17,2,17,8,2,5,1,9,1,8,2,17,1,9,17,9,2,5,2,6,17,1,4,9,17,9,1,17,1,5,4,8,1,5,2,9,17,5,6,5,11,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,6,19,9,17,8,1,5,2,6,18,15,6,17,2,17,5,2,6,17,4,17,9,17,2,17,6,18,4,17,1,5,4,6,17,15,15,1,6,9,17,5,6,5,11,6,19,9,17,8,1,5,2,6,18,12,6,17,2,17,5,2,6,17,4,17,9,17,2,17,6,18,15,17,1,5,4,9,17,5,6,5,11,6,2,18,1,3,1,4,6,2,18,1,9,5,7,5,6,5,11,5,17,6,19,9,17,8,1,5,2,6,18,12,6,17,2,17,9,17,8,1,5,2,6,17,4,17,9,1,8,2,9,17,2,17,8,2,5,1,9,1,8,2,17,1,9,17,9,2,5,2,6,17,1,2,9,17,9,1,17,1,5,4,8,1,5,2,9,17,5,6,5,11,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,6,19,9,17,8,1,5,2,6,18,15,6,17,2,17,5,2,6,17,4,17,9,17,2,17,5,4,9,17,5,6,5,11,6,19,9,17,8,1,5,2,6,18,12,6,17,2,17,5,2,6,17,4,17,9,17,2,17,6,18,2,17,1,5,4,9,17,5,6,5,11,6,17,12,8,9,17,5,6,5,11,6,19,6,2,19,14,9,5,8,3,8,3,6,17,4,17,5,1,8,17,6,17,4,18,1,6,17,4,17,5,2,8,17,6,17,1,14,8,1,5,2,6,17,2,18,1,7,15,5,3,6,1,6,6,6,5,4,13,6,1,7,4,6,8,3,10,2,17,7,3,7,5,6,2,7,4,7,2,6,1,6,3,7,4,6,9,6,15,6,14,2,17,6,15,7,6,6,5,7,2,6,6,6,12,6,15,7,7,20,8,1,5,2,5,17,6,2,18,1,7,8,6,5,6,5,11,6,19,8,2,8,2,17,1,8,3,8,1,1,17,1,5,6,2,19,14,9,5,5,7,6,17,4,17,5,1,6,2,4,6,1,11,12,13,6,17,14,5,1,11,8,1,5,2,6,18,4,17,1,6,32,0,16,2,18,1,3,13,11,9,17,6,2,18,1,13,10,14,5,6,5,11,6,17,4,17,5,1,8,17,9,1,17,3,9,17,15,13,5,11,6,19,9,17,8,1,5,2,6,18,12,6,17,2,17,5,2,6,17,4,17,9,17,2,17,6,18,5,17,1,9,17,5,6,5,11,6,19,9,1,8,2,5,2,6,18,12,6,17,2,17,9,17,8,1,5,2,6,17,4,17,8,17,8,4,2,17,9,2,8,4,5,2,6,17,1,11,9,17,9,2,17,1,9,17,5,2,9,17,2,17,5,4,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,9,17,5,6,5,11,6,19,8,2,8,1,5,2,6,18,12,6,17,2,17,9,17,8,1,5,2,6,17,4,17,8,17,8,3,2,17,6,18,1,6,18,1,6,17,10,17,1,11,17,3,8,5,1,6,8,4,5,2,6,17,1,12,17,1,9,17,9,1,5,2,9,17,2,17,9,2,9,1,5,17,5,17,5,6,5,11,6,2,18,1,4,5,8,8,1,6,2,18,1,7,11,5,5,6,5,11,6,17,4,17,8,17,5,1,6,18,4,8,1,5,2,6,17,2,4,8,1,17,1,8,2,5,2,6,17,2,17,8,1,17,1,8,17,5,1,6,18,1,6,18,1,6,17,14,17,1,11,17,3,1,6,6,3,2,17,4,10,7,15,17,7,6,17,14,2,1,11,1,7,9,17,5,2,9,17,5,1,6,19,9,1,6,17,6,17,9,1,6,18,1,6,18,1,6,17,10,17,1,11,17,3,8,5,1,6,9,1,6,2,18,1,4,9,14,9,1,6,2,18,1,12,14,8,5,6,5,11,6,19,6,17,4,17,5,1,8,17,8,3,17,3,8,1,8,5,5,10,15,4,9,1,5,17,5,17,3,13,8,17,6,19,8,1,1,4,6,2,18,1,4,13,11,5,7,6,17,4,17,5,1,9,1,5,17,6,17,1,15,1,9,6,17,3,15,3,13,17,1,1,6,8,2,17,1,6,17,4,17,5,2,3,13,8,2,5,2,3,13,6,19,6,17,2,17,8,4,17,1,3,14,6,2,18,1,4,14,17,5,6,5,11,6,17,6,17,9,1,5,17,5,11,5,17,9,1,5,17,9,1,5,17,8,1,8,1,9,17,6,2,18,1,5,17,8,5,7,6,17,4,17,5,1,6,2,4,6,1,11,12,13,6,17,14,5,1,11,8,1,5,2,6,18,4,17,1,6,2,18,1,3,13,11,9,1,9,17,6,2,18,1,13,9,11,5,6,5,11,5,17,6,17,4,17,5,1,6,18,1,6,18,1,6,17,10,17,1,11,17,3,8,4,1,6,9,17,7,15,11,12,7,12,13,7,5,10,2,17,14,14,33,0,16,2,7,15,13,9,10,13,14,11,10,11,3,2,17,4,1,15,7,5,5,2,1,4,13,11,12,6,11,15,15,10,9,17,12,12,17,2,2,5,11,3,9,13,10,2,14,5,12,2,13,3,11,9,17,6,19,9,17,10,2,5,17,5,17,5,17,5,6,5,11,6,2,18,1,5,4,12,6,2,18,1,9,6,10,5,6,5,11,6,2,18,1,5,5,6,6,2,18,1,9,6,10,5,6,5,11,6,2,18,1,5,6,17,6,2,18,1,8,17,3,5,6,5,11,9,17,5,17,6,19,6,2,18,1,5,6,14,6,2,19,14,11,7,5,6,5,11,9,17,5,17,6,19,8,1,1,5,6,2,18,1,5,8,9,5,7,6,2,18,1,5,8,3,6,2,18,1,17,6,5,5,6,5,11,6,2,18,1,5,8,15,5,6,5,11,8,2,6,17,4,18,1,5,1,5,11,9,17,5,17,6,19,8,2,1,5,6,2,18,1,5,10,15,5,7,6,19,8,3,8,1,5,2,6,18,12,6,17,2,17,5,2,6,17,4,17,9,17,2,17,5,4,6,2,18,1,5,11,5,5,6,5,11,8,3,6,17,2,18,1,5,1,5,11,6,17,4,17,8,17,5,1,6,17,6,17,8,1,17,1,8,2,5,2,9,4,8,5,5,2,6,17,2,17,8,5,17,1,9,1,9,17,9,1,5,2,8,3,17,1,9,1,9,17,9,1,5,2,5,17,9,1,5,17,5,17,9,17,5,6,5,11,6,19,6,2,19,10,2,11,8,2,6,20,1,5,1,6,2,19,15,13,3,8,4,6,17,4,18,1,5,1,6,2,19,14,8,8,8,6,6,17,2,18,1,5,1,6,2,18,1,17,14,17,6,2,18,1,8,3,4,5,6,5,11,8,2,6,2,18,1,6,5,12,5,7,6,2,18,1,6,17,15,8,2,6,2,18,1,8,3,8,5,6,5,11,6,1,17,1,13,1,6,17,15,5,1,11,6,2,18,1,6,2,17,8,3,6,2,18,1,8,3,8,5,6,5,11,6,17,4,17,5,1,6,17,2,18,1,6,2,18,1,6,3,4,9,3,9,2,9,1,9,17,6,2,18,1,12,15,6,5,6,5,11,6,17,4,17,8,17,5,1,6,17,1,15,1,9,8,1,8,4,17,3,17,1,8,1,5,2,9,17,8,2,9,17,5,2,6,2,4,6,1,11,12,13,6,17,14,5,1,11,8,2,5,2,6,2,18,1,3,13,11,9,1,6,18,4,17,1,6,2,18,1,13,9,11,5,6,5,11,5,17,5,17,5,17,5,6,5,11,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,6,36,0,16,17,9,17,8,1,5,2,6,18,15,6,17,2,17,5,2,6,17,4,17,9,17,2,17,6,18,4,17,1,8,17,5,4,6,17,15,15,1,9,1,6,6,18,1,1,7,9,17,5,5,5,6,5,11,6,19,8,2,6,2,18,1,6,9,9,5,7,5,17,6,19,6,2,19,10,2,11,5,6,5,11,8,2,8,2,17,2,8,2,8,4,8,2,8,1,6,2,18,1,6,10,7,5,7,15,14,5,11,17,4,1,4,6,2,19,14,9,5,5,7,6,17,4,17,5,1,6,2,4,6,1,11,12,13,6,17,14,5,1,11,8,1,5,2,6,18,4,17,1,6,2,18,1,3,13,11,9,17,6,2,18,1,13,12,17,5,6,5,11,6,19,6,2,19,14,9,5,8,3,8,3,6,17,4,17,5,1,8,17,6,17,4,18,1,6,17,4,17,5,2,8,17,6,17,1,10,8,1,5,2,6,17,2,18,1,7,15,5,3,6,1,6,6,6,5,4,13,6,1,7,4,6,8,3,10,2,17,6,4,6,9,7,6,6,9,7,3,6,9,6,15,6,14,2,17,6,2,7,9,2,17,7,10,6,5,7,2,6,15,28,8,1,5,2,5,17,6,2,18,1,8,11,15,5,6,5,11,6,1,1,12,2,17,9,17,5,6,5,11,6,17,1,8,9,17,5,6,5,11,6,2,18,1,7,2,1,6,2,18,1,9,5,7,5,6,5,11,5,17,6,17,4,17,8,17,5,1,6,17,2,17,8,1,17,1,9,17,9,1,5,2,6,7,17,13,14,17,11,6,11,3,10,7,6,4,20,8,1,5,2,9,17,5,6,5,11,6,2,18,1,7,4,5,6,2,18,1,9,5,7,5,6,5,11,6,17,4,17,5,1,8,17,6,17,2,18,1,6,17,4,17,5,2,8,17,6,2,18,1,7,6,5,8,5,6,7,17,13,14,17,11,6,11,3,10,7,6,4,20,8,6,6,2,18,1,8,15,10,5,6,5,11,9,17,5,2,9,3,9,2,5,17,5,17,5,17,5,6,5,11,6,19,6,2,18,1,7,7,12,8,3,8,3,6,2,18,1,9,1,11,5,6,5,11,6,18,2,1,4,9,3,9,2,5,17,5,17,5,17,5,6,5,11,6,19,8,1,8,4,8,4,1,1,1,5,6,2,18,1,7,10,13,5,7,6,17,4,17,5,1,6,2,4,6,1,11,12,13,6,17,14,5,1,11,8,1,5,2,6,18,4,17,1,6,2,18,1,3,13,11,9,1,9,17,6,2,18,1,13,9,11,5,6,5,11,5,17,5,17,5,17,9,18,3,9,17,5,6,5,11,6,2,18,1,7,12,36,0,16,8,1,6,2,18,1,9,5,1,5,6,5,11,6,2,18,1,7,13,15,5,7,6,17,4,17,5,1,6,2,4,6,1,11,12,13,6,17,14,5,1,11,8,1,5,2,6,18,4,17,1,6,2,18,1,3,13,11,9,17,6,2,18,1,13,13,2,5,6,5,11,7,15,3,6,17,8,9,4,10,1,3,11,10,1,10,3,2,1,17,6,6,7,12,8,2,8,4,9,2,13,11,9,8,13,12,10,3,14,2,17,7,6,12,12,3,7,3,5,10,9,2,17,10,3,12,10,5,17,5,13,3,8,2,11,11,12,5,5,5,6,5,11,6,2,18,1,8,17,13,6,2,18,1,9,6,10,5,6,5,11,6,17,4,17,5,1,8,17,6,17,6,18,1,6,17,4,17,5,2,8,17,6,19,8,1,5,2,6,17,2,18,1,6,3,6,17,8,13,11,6,6,17,8,1,5,2,6,17,2,18,1,6,1,1,12,2,17,8,1,5,2,5,17,9,17,5,17,9,17,5,6,5,11,4,2,9,17,5,6,5,11,6,17,6,17,8,17,8,2,6,17,4,17,5,1,6,17,2,18,1,6,2,18,1,8,4,14,9,1,9,17,6,2,18,1,12,13,1,5,6,5,11,6,17,4,17,8,17,5,1,6,17,1,15,1,9,8,1,8,4,17,3,17,1,8,1,5,2,9,1,9,17,5,2,9,17,5,17,6,17,2,17,5,11,8,17,1,5,6,2,18,1,8,10,8,5,7,8,1,5,1,6,19,1,9,9,17,9,1,17,1,9,17,8,2,9,17,8,2,9,17,8,1,1,17,6,2,18,1,8,8,17,5,7,15,14,5,11,17,1,6,17,2,18,1,5,1,6,18,1,6,18,1,6,17,15,8,1,11,17,3,1,9,1,6,1,5,6,2,18,1,8,10,2,5,7,6,18,1,17,1,8,1,5,2,9,17,5,17,6,2,19,8,11,1,5,6,5,11,6,2,18,1,8,6,3,5,6,5,11,5,17,5,17,6,17,4,17,8,17,5,1,6,19,8,1,5,2,6,17,2,17,8,1,17,1,9,17,9,1,5,2,9,2,9,1,5,17,5,17,5,6,5,11,6,19,8,1,8,3,6,2,18,1,8,14,3,5,7,6,17,4,17,5,1,6,2,4,6,1,11,12,13,6,17,14,5,1,11,8,1,5,2,6,18,4,17,1,6,2,18,1,3,13,11,9,1,9,17,6,2,18,1,13,9,11,5,6,5,11,5,17,6,19,8,3,8,5,8,1,6,2,18,1,8,15,17,5,7,15,14,5,11,17,4,9,5,9,4,5,17,5,17,5,17,5,17,5,17,5,6,5,11,6,19,6,2,18,1,9,1,3,8,2,6,2,19,14,8,8,8,6,8,36,0,16,6,6,3,15,15,15,15,15,15,15,15,6,2,18,1,6,8,8,1,6,5,6,5,11,9,4,9,3,5,17,5,17,5,17,5,17,5,6,5,11,8,17,5,1,8,2,5,1,6,19,9,1,1,4,1,5,6,2,18,1,9,3,2,5,7,5,17,6,18,1,6,2,19,10,2,11,5,6,5,11,8,1,5,1,8,3,5,1,1,1,6,2,18,1,9,4,4,5,7,6,19,6,2,18,1,9,4,7,5,6,5,11,6,18,2,5,11,6,17,15,15,1,6,9,3,9,2,5,17,5,17,5,17,5,6,5,11,3,11,1,5,1,5,9,17,5,6,5,11,6,17,4,17,5,1,8,17,6,17,2,18,1,6,17,4,17,5,2,8,17,6,19,8,1,5,2,5,17,9,17,5,6,5,11,6,17,4,17,5,1,8,17,6,17,6,18,1,6,17,4,17,5,2,8,17,6,19,8,1,5,2,6,17,2,18,1,6,19,8,1,5,2,6,17,2,18,1,6,19,8,1,5,2,5,17,9,17,5,6,5,11,6,1,1,6,14,17,8,17,6,2,18,1,14,14,7,8,3,3,9,17,1,9,17,5,6,5,11,8,17,3,5,6,2,19,10,2,11,8,1,6,2,18,1,14,12,4,5,6,5,11,8,17,3,5,6,2,19,10,2,11,8,1,6,2,18,1,14,13,11,5,6,5,11,8,17,5,1,6,2,19,10,2,11,8,1,6,2,18,1,14,13,11,5,6,5,11,6,19,6,17,2,17,8,2,8,4,17,3,1,2,1,5,6,2,18,1,9,13,3,5,7,6,19,8,17,15,13,5,11,6,19,6,2,18,1,9,1,3,8,4,8,4,6,2,18,1,9,9,9,5,6,5,11,6,19,8,17,6,17,4,17,8,3,8,5,17,3,1,2,1,5,6,2,18,1,9,15,5,5,7,6,19,8,17,15,13,5,11,6,19,6,2,18,1,10,17,3,8,5,8,5,6,2,18,1,9,9,9,5,6,5,11,9,2,5,17,5,17,6,17,2,17,6,2,18,1,10,1,6,8,5,8,2,8,6,17,1,6,2,18,1,9,9,9,5,6,5,11,9,1,5,17,5,17,9,2,5,17,9,2,9,17,5,17,5,6,5,11,6,19,8,17,6,19,6,17,6,17,8,4,8,6,17,3,1,2,1,5,6,2,18,1,10,3,6,5,7,6,19,8,17,15,13,5,11,6,19,6,2,18,1,10,4,4,8,6,8,6,6,2,18,1,9,9,9,5,6,5,11,9,3,5,17,5,17,6,17,2,17,6,2,18,1,10,5,7,8,6,8,2,8,7,17,1,6,2,18,1,9,37,0,16,9,9,5,6,5,11,9,2,5,17,5,17,6,17,4,17,6,2,18,1,10,6,10,8,6,8,2,8,7,17,1,6,2,18,1,9,10,6,5,6,5,11,9,1,5,17,5,17,9,2,5,17,9,2,5,17,9,2,5,6,5,11,6,19,8,17,6,17,4,17,8,3,8,5,17,3,1,2,1,5,6,2,18,1,10,8,8,5,7,6,19,8,17,15,13,5,11,6,19,6,2,18,1,10,9,6,8,5,8,5,6,2,18,1,9,9,9,5,6,5,11,9,2,5,17,5,17,6,17,2,17,6,2,18,1,10,1,6,8,5,8,2,8,6,17,1,6,2,18,1,9,10,6,5,6,5,11,6,19,6,17,2,17,8,2,8,4,17,3,1,2,1,5,6,2,18,1,10,11,12,5,7,6,19,8,17,15,13,5,11,6,19,6,2,18,1,9,1,3,8,4,8,4,6,2,18,1,9,10,6,5,6,5,11,6,19,6,17,2,17,8,2,8,4,17,3,1,2,1,5,6,2,18,1,10,13,13,5,7,6,19,8,17,15,13,5,11,6,19,6,2,18,1,9,1,3,8,4,8,4,6,2,18,1,9,11,3,5,6,5,11,6,2,18,1,10,15,6,8,1,6,2,18,1,14,5,14,5,6,5,11,8,2,5,2,5,17,5,17,5,6,5,11,6,2,18,1,10,15,6,8,1,6,2,18,1,14,2,1,5,6,5,11,6,2,18,1,10,15,6,8,1,6,2,18,1,14,2,14,5,6,5,11,6,2,18,1,10,15,6,6,2,18,1,11,2,1,8,2,6,2,18,1,14,3,3,5,6,5,11,6,2,19,9,15,9,5,6,5,11,6,2,18,1,10,15,6,6,2,18,1,11,2,1,8,2,6,2,19,9,15,9,5,6,5,11,6,19,6,2,18,1,11,4,3,8,2,6,2,18,1,14,1,4,5,6,5,11,6,2,18,1,11,4,15,8,1,8,5,6,2,19,8,11,1,5,6,5,11,9,3,5,17,6,2,18,1,11,6,1,8,1,8,5,6,17,2,17,8,6,17,1,6,2,18,1,14,8,17,5,6,5,11,9,2,9,17,9,2,17,1,9,2,9,1,5,17,5,17,5,6,5,11,6,2,18,1,10,15,6,8,1,6,2,18,1,14,6,6,5,6,5,11,6,2,18,1,10,15,6,8,1,6,2,18,1,14,7,3,5,6,5,11,6,19,6,2,18,1,11,8,14,8,2,6,2,18,1,14,1,4,5,6,5,11,6,2,18,1,11,9,10,8,1,8,5,6,2,18,1,14,1,8,5,6,5,11,9,3,5,17,6,2,18,1,11,10,12,8,1,8,38,0,16,5,6,17,2,17,8,6,17,1,6,2,18,1,14,8,17,5,6,5,11,6,2,18,1,11,11,7,8,1,6,2,18,1,14,10,15,5,6,5,11,9,17,9,3,17,1,9,3,9,2,5,17,5,17,5,17,5,6,5,11,6,19,6,2,18,1,11,13,17,6,17,1,11,8,3,6,2,18,1,14,1,8,5,6,5,11,7,15,5,3,6,1,6,6,6,5,4,13,6,1,7,4,6,8,3,10,2,17,6,1,6,4,6,4,6,9,7,4,6,9,6,15,6,14,2,17,6,15,7,6,6,5,7,2,6,6,6,12,6,15,7,7,26,8,1,5,2,6,17,2,18,1,9,2,9,1,5,17,5,17,5,6,5,11,6,19,6,2,18,1,12,17,11,6,17,2,1,8,3,6,2,18,1,14,1,8,5,6,5,11,7,15,5,3,6,1,6,6,6,5,4,13,6,1,7,4,6,8,3,10,2,17,6,13,7,5,6,12,7,4,6,9,7,17,6,12,6,9,6,3,6,1,7,4,6,9,6,15,6,14,2,17,6,15,7,6,6,5,7,2,6,6,6,12,6,15,8,1,5,2,6,17,7,7,6,17,15,8,1,11,6,17,2,17,8,2,17,1,5,2,6,17,4,18,1,9,2,9,1,5,17,5,17,5,6,5,11,6,19,6,2,18,1,12,5,17,6,17,3,11,8,3,6,2,18,1,14,1,8,5,6,5,11,7,15,4,3,6,1,6,14,6,14,6,15,7,4,2,17,7,3,6,5,7,4,2,17,6,1,2,17,7,17,7,2,6,15,7,8,7,9,2,17,6,9,6,13,7,17,6,12,6,5,6,13,6,5,6,14,7,4,6,1,7,4,6,9,6,15,8,1,5,2,7,15,6,14,2,17,7,4,6,15,2,17,6,1,2,17,6,14,6,15,6,14,2,13,6,3,6,15,6,14,7,4,7,2,6,1,6,3,7,4,2,17,6,1,6,4,6,4,7,2,6,5,7,3,7,3,26,6,17,2,17,8,2,17,1,5,2,6,17,4,18,1,9,2,9,1,5,17,5,17,5,6,5,11,8,17,5,1,6,17,2,17,8,3,17,1,9,17,6,2,18,1,12,11,5,8,4,8,2,6,2,18,1,12,11,11,5,6,5,11,5,17,5,17,5,17,5,17,5,6,5,11,6,2,18,1,10,15,6,8,1,6,2,19,9,15,9,5,6,5,11,6,2,18,1,10,15,6,8,1,6,2,18,1,14,5,8,5,6,5,11,6,19,6,2,18,1,12,13,15,8,2,8,4,6,2,18,1,11,2,7,5,6,5,11,5,17,6,17,2,18,1,9,1,9,17,5,17,5,6,5,11,6,19,6,2,19,14,9,5,8,2,39,0,16,8,4,6,2,18,1,11,3,6,5,6,5,11,6,19,6,2,18,1,13,17,4,8,2,8,6,6,2,18,1,11,3,6,5,6,5,11,9,1,5,17,6,2,18,1,13,1,2,8,2,8,5,6,2,18,1,11,1,2,5,6,5,11,6,18,2,8,2,17,1,9,1,5,17,6,2,18,1,13,2,4,8,2,8,4,6,2,18,1,11,3,6,5,6,5,11,9,5,9,4,5,17,5,17,5,17,5,17,5,17,5,6,5,11,6,17,2,17,8,1,17,1,6,2,19,10,2,11,8,2,8,4,6,2,18,1,10,15,12,5,6,5,11,6,17,6,17,8,1,17,1,6,2,18,1,13,4,13,8,2,8,6,6,2,18,1,10,14,11,5,6,5,11,6,2,18,1,13,5,12,6,17,2,17,8,3,17,1,8,5,6,2,18,1,10,15,12,5,6,5,11,6,2,18,1,9,1,3,6,17,4,17,8,3,17,1,8,4,6,2,18,1,10,14,11,5,6,5,11,6,17,2,17,8,1,17,1,6,2,19,10,2,11,8,2,8,4,6,2,18,1,11,17,7,5,6,5,11,6,17,2,17,8,1,17,1,6,2,19,10,2,11,8,2,8,4,6,2,18,1,11,6,11,5,6,5,11,6,17,2,17,8,1,17,1,6,2,19,10,2,11,8,2,8,4,6,2,18,1,11,7,6,5,6,5,11,6,17,2,17,8,17,8,2,5,2,8,1,17,1,6,2,19,14,9,5,8,1,8,4,6,2,18,1,11,8,1,5,6,5,11,6,17,2,17,8,17,8,2,5,2,8,1,17,1,6,2,19,10,2,11,8,1,6,2,18,1,11,12,1,5,6,5,11,6,17,2,17,8,17,8,2,5,2,8,1,17,1,6,2,19,10,2,11,8,1,6,2,18,1,11,15,12,5,6,5,11,6,17,2,17,8,17,8,2,5,2,8,1,17,1,6,2,19,10,2,11,8,1,6,2,18,1,12,4,1,5,6,5,11,6,17,2,17,8,1,17,1,6,2,19,10,2,11,8,2,8,4,6,2,18,1,12,10,2,5,6,5,11,6,17,2,17,8,1,17,1,6,2,19,10,2,11,8,2,8,4,6,2,18,1,12,11,11,5,6,5,11,6,17,2,17,8,1,17,1,6,2,19,10,2,11,8,2,8,4,6,2,18,1,12,12,6,5,6,5,11,5,1,9,17,5,6,5,11,9,17,8,1,5,2,6,17,2,18,1,9,17,5,6,5,11,6,19,6,2,19,10,2,11,8,2,6,2,18,1,14,4,12,5,6,5,11,1,5,1,5,9,17,5,6,5,11,6,18,1,6,18,1,6,17,15,17,1,11,17,3,1,9,1,40,0,16,6,9,17,5,6,5,11,8,17,6,2,19,8,11,1,8,1,6,2,18,1,14,11,9,5,6,5,11,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,9,17,5,6,5,11,6,17,15,15,1,6,9,17,5,6,5,11,6,19,6,2,19,10,2,11,8,2,5,11,6,19,6,2,19,10,2,11,8,2,6,2,18,1,14,2,1,5,6,5,11,6,19,6,2,19,10,2,11,8,2,6,2,18,1,14,4,17,5,6,5,11,6,19,5,11,8,3,8,1,1,17,1,5,6,2,18,1,14,9,13,5,7,8,1,8,1,17,1,5,1,8,3,8,2,17,1,5,2,6,17,2,18,1,6,2,18,1,14,8,3,5,6,5,11,8,3,8,1,1,1,1,5,6,2,18,1,12,11,5,5,7,5,17,5,17,6,19,9,1,17,1,5,2,5,6,5,11,6,17,1,15,17,1,6,17,1,15,1,9,1,6,9,17,5,6,5,11,6,18,3,8,1,1,17,6,2,19,12,5,8,5,7,15,14,5,11,6,2,18,1,14,12,15,8,1,6,2,18,1,14,2,1,5,6,5,11,8,1,1,4,6,2,19,12,5,8,5,7,6,19,8,17,15,13,5,11,6,2,18,1,14,12,15,8,1,6,2,19,9,15,9,5,6,15,14,6,17,8,17,6,17,4,17,5,2,3,4,8,17,1,5,6,2,20,1,1,5,7,6,19,8,17,15,13,5,11,5,17,6,17,4,17,5,1,6,2,18,1,6,14,17,3,8,17,3,8,17,6,2,18,1,6,14,17,8,3,3,9,8,1,17,1,6,17,4,17,8,1,9,17,5,2,6,2,20,3,4,9,1,6,2,20,11,15,5,6,5,11,6,19,8,17,5,4,3,3,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,9,9,1,8,2,1,6,1,7,8,2,5,5,6,18,2,8,17,5,4,9,17,9,1,1,6,6,18,1,6,18,1,6,17,10,17,1,11,17,3,9,4,8,5,1,6,1,7,9,17,5,5,6,18,4,8,17,5,4,6,18,1,6,17,2,8,1,11,6,18,1,6,17,12,8,1,11,17,3,1,9,1,6,6,5,17,1,26,9,5,8,5,1,6,9,5,9,17,9,5,17,2,9,4,9,17,9,4,1,7,9,17,9,3,5,5,6,18,1,9,2,9,17,9,2,5,5,6,18,8,8,17,5,4,6,1,17,1,18,6,18,1,6,17,10,8,1,11,17,3,1,9,1,6,6,1,17,1,18,9,3,9,17,9,2,1,6,9,2,9,17,9,2,17,2,41,0,16,1,7,9,17,5,5,6,2,19,1,3,15,5,6,5,11,8,17,5,1,6,2,20,11,9,8,1,6,2,19,1,2,5,5,6,5,11,9,2,9,1,5,17,5,17,5,6,5,11,6,19,8,17,6,19,6,17,6,17,8,4,8,6,17,3,1,2,1,5,6,2,20,13,5,5,7,6,19,8,17,15,13,5,11,6,19,6,2,20,14,3,8,6,8,6,6,2,20,10,12,5,6,5,11,9,3,5,17,5,17,6,17,2,17,6,2,20,15,6,8,6,8,2,8,7,17,1,6,2,20,10,12,5,6,5,11,9,2,5,17,5,17,6,17,4,17,6,2,19,1,17,9,8,6,8,2,8,7,17,1,6,2,20,10,12,5,6,5,11,9,1,5,17,5,17,9,2,5,17,9,2,5,17,9,2,5,6,5,11,6,19,6,18,1,6,18,1,6,17,10,17,1,11,17,3,8,2,1,6,6,2,20,11,9,5,6,5,11,6,2,19,1,3,17,8,1,6,2,19,1,1,3,5,6,5,11,8,1,1,4,6,2,19,1,3,12,5,7,6,19,8,17,15,13,5,11,5,17,5,6,5,11,6,1,1,5,9,1,8,17,6,2,19,1,4,15,6,19,3,9,6,19,15,3,15,14,6,17,8,17,6,17,4,17,5,2,3,4,8,17,1,5,6,1,18,1,17,5,7,6,19,8,17,15,13,5,11,5,17,6,18,4,3,6,1,17,6,1,18,11,4,5,7,6,19,3,5,6,17,14,17,1,12,8,17,6,3,10,8,10,10,1,11,3,1,1,1,6,1,18,7,1,5,7,8,17,6,3,10,8,10,10,1,11,3,1,1,4,6,1,17,1,3,3,5,7,8,17,6,3,11,8,17,7,7,7,14,10,1,4,6,1,17,1,3,11,5,7,8,17,6,3,11,10,17,11,11,10,4,17,1,4,6,1,17,1,4,3,5,7,8,17,6,3,12,13,3,2,9,3,13,14,1,4,6,1,17,1,4,11,5,7,8,17,6,3,13,4,10,3,14,9,13,7,1,4,6,1,17,1,5,3,5,7,8,17,6,3,15,8,12,13,5,17,10,2,1,4,6,1,17,1,6,9,5,7,6,1,18,11,4,5,6,5,11,8,17,6,3,3,9,2,14,5,3,12,13,1,4,6,1,18,11,9,5,7,8,17,6,3,3,13,5,9,13,1,2,6,1,4,6,1,18,13,7,5,7,8,17,6,3,4,1,6,2,1,6,9,15,1,4,6,1,18,14,12,5,7,8,17,6,3,7,10,14,1,7,6,15,15,1,4,6,1,17,1,17,1,5,7,8,17,6,3,8,9,6,7,5,42,0,16,12,10,12,1,4,6,1,17,1,17,9,5,7,8,17,6,3,10,3,14,6,11,10,9,4,1,4,6,1,17,1,1,14,5,7,5,11,6,19,8,17,15,13,5,11,6,1,18,12,1,6,1,17,1,7,1,5,6,5,11,6,17,4,17,5,1,6,1,18,12,14,9,1,9,17,6,1,1,4,1,9,5,6,5,11,6,17,4,17,5,1,8,17,9,1,17,3,9,17,15,3,5,11,6,1,18,13,15,6,1,17,1,8,2,5,6,5,11,6,17,4,17,5,1,6,1,18,12,14,9,1,9,17,6,1,1,4,8,1,5,6,5,11,6,1,18,15,4,6,1,17,2,3,7,5,6,5,11,6,17,4,17,5,1,6,1,18,12,14,9,1,9,17,6,1,1,3,15,17,5,6,5,11,6,1,18,13,15,6,1,17,2,4,6,5,6,5,11,6,1,17,1,1,12,6,1,17,1,1,7,3,6,6,18,4,6,1,1,1,10,15,5,6,5,11,6,1,17,2,4,12,5,6,5,11,18,5,11,6,1,17,1,2,6,6,1,17,4,5,9,5,6,5,11,6,17,4,17,5,1,6,1,18,12,14,9,1,9,17,6,1,1,4,5,8,5,6,5,11,6,1,18,15,4,6,1,17,4,7,5,5,6,5,11,6,1,18,13,15,6,1,17,4,8,13,5,6,5,11,6,1,17,1,1,12,6,1,17,4,9,9,5,6,5,11,6,1,18,13,15,6,1,17,7,17,10,5,6,5,11,6,1,17,1,5,11,6,1,17,7,1,17,5,6,5,11,6,17,4,17,5,1,6,1,18,12,14,9,2,9,1,9,17,6,1,1,4,6,6,5,6,5,11,6,1,18,12,1,6,1,17,7,5,6,5,6,5,11,6,18,4,5,4,6,4,17,1,24,9,18,4,6,17,15,15,1,6,9,17,5,6,5,11,6,19,8,17,6,19,6,18,4,6,18,5,9,17,5,4,9,17,6,1,17,1,19,10,9,18,4,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,6,3,17,9,17,2,15,1,10,12,6,17,4,17,5,1,8,1,6,3,15,15,15,15,15,15,15,15,1,6,6,17,14,17,1,11,8,1,5,2,6,18,4,17,1,6,17,6,17,6,17,4,17,5,1,8,17,8,3,17,3,8,1,8,6,8,17,3,11,1,5,8,17,1,5,6,1,17,1,13,5,5,7,6,19,8,17,15,13,5,11,5,17,5,10,15,10,1,5,8,17,1,5,6,1,17,1,14,9,5,7,3,13,6,19,8,17,3,14,3,13,6,19,15,13,5,11,5,17,5,17,5,17,5,17,6,17,4,44,0,16,5,1,3,13,6,17,1,15,1,9,6,17,1,15,8,2,17,1,1,6,8,2,17,1,8,17,6,17,4,17,5,2,5,17,6,1,17,2,17,13,9,1,9,17,8,1,17,1,9,17,6,1,1,2,17,7,5,6,5,11,5,17,9,1,5,17,9,1,5,17,6,19,6,18,1,5,4,6,19,1,4,6,1,17,2,2,4,5,7,8,2,6,1,17,2,2,6,5,6,5,11,8,1,5,11,6,18,1,6,18,1,6,17,7,17,1,11,17,3,1,6,9,3,5,17,5,17,5,17,5,17,9,17,5,6,5,11,6,19,5,4,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,9,17,5,6,5,11,6,18,5,5,4,9,17,5,6,5,11,6,18,8,8,17,5,4,6,1,17,1,18,6,18,1,6,17,10,8,1,11,17,3,1,9,1,6,6,1,17,1,18,6,18,1,6,18,1,6,17,10,17,1,11,17,3,8,4,8,1,1,6,8,2,17,2,9,2,9,17,9,2,1,7,9,2,8,3,9,17,5,5,6,18,2,5,4,6,17,4,17,5,1,6,3,6,4,14,3,2,9,12,11,6,17,14,1,1,11,8,1,5,2,8,6,8,4,1,6,9,4,6,3,12,9,12,6,5,3,9,6,9,4,6,1,17,2,10,2,9,4,9,3,8,1,1,6,9,3,9,17,9,1,17,4,1,6,9,17,6,18,4,17,1,6,1,1,3,15,14,5,6,5,11,6,17,2,17,6,17,4,17,5,1,8,17,8,3,17,3,8,1,6,19,8,7,8,17,3,11,1,5,8,17,1,5,6,1,17,2,11,12,5,7,6,19,8,17,15,13,5,11,5,17,5,10,15,1,1,5,8,17,1,5,6,1,17,2,13,17,5,7,3,13,6,19,8,17,3,14,3,13,6,19,15,13,5,11,5,17,5,17,5,17,5,17,6,17,4,17,5,1,3,13,6,17,1,15,1,9,6,17,1,15,8,2,17,1,1,6,8,2,17,1,8,17,6,17,4,17,5,2,5,17,6,1,17,2,15,4,9,1,9,17,8,1,17,1,9,17,6,1,1,1,8,9,5,6,5,11,6,18,4,6,18,5,6,1,17,1,19,10,8,1,5,4,8,1,6,18,1,6,18,1,6,17,10,17,1,11,17,3,17,2,1,9,1,6,9,17,8,3,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,17,2,1,7,9,17,5,5,5,17,6,19,8,17,6,18,4,6,18,5,9,17,5,4,9,17,6,1,17,1,19,10,9,18,4,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,6,44,0,16,3,17,13,15,14,1,6,8,1,6,17,4,17,5,1,8,1,6,3,15,15,15,15,15,15,15,15,1,6,6,17,14,17,1,11,8,1,5,2,6,18,4,17,1,6,17,2,17,6,17,4,17,5,1,8,17,8,3,17,3,8,1,8,6,8,17,3,11,1,5,8,17,1,5,6,1,17,3,6,11,5,7,6,19,8,17,15,13,5,11,5,17,5,10,15,10,1,5,8,17,1,5,6,1,17,3,7,15,5,7,3,13,6,19,8,17,3,14,3,13,6,19,15,13,5,11,5,17,5,17,5,17,5,17,6,17,4,17,5,1,3,13,6,17,1,15,1,9,6,17,1,15,8,2,17,1,1,6,8,2,17,1,8,17,6,17,4,17,5,2,5,17,6,1,17,3,10,3,9,1,9,17,8,1,17,1,9,17,6,1,1,1,8,9,5,6,5,11,6,18,4,6,18,5,9,17,5,4,9,17,6,1,17,1,19,10,9,18,4,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,6,3,13,2,1,2,2,17,10,7,6,17,4,17,5,1,8,1,6,3,15,15,15,15,15,15,15,15,1,6,6,17,14,17,1,11,8,1,5,2,6,18,4,17,1,6,17,2,17,6,17,4,17,5,1,8,17,8,3,17,3,8,1,8,6,8,17,3,11,1,5,8,17,1,5,6,1,17,3,15,1,5,7,6,19,8,17,15,13,5,11,5,17,5,10,15,10,1,5,8,17,1,5,6,1,17,4,17,5,5,7,3,13,6,19,8,17,3,14,3,13,6,19,15,13,5,11,5,17,5,17,5,17,5,17,6,17,4,17,5,1,3,13,6,17,1,15,1,9,6,17,1,15,8,2,17,1,1,6,8,2,17,1,8,17,6,17,4,17,5,2,5,17,6,1,17,4,2,9,9,1,9,17,8,1,17,1,9,17,6,1,1,1,8,9,5,6,5,11,6,18,2,5,4,9,1,9,3,5,17,9,1,5,17,6,18,1,6,18,1,6,17,10,17,1,11,17,3,8,17,8,4,1,6,9,1,1,6,1,4,6,1,17,4,4,10,5,7,6,18,1,6,1,17,4,4,13,5,6,5,11,6,19,5,11,6,17,15,15,1,6,6,18,1,5,5,5,17,5,17,5,17,5,17,5,6,5,11,6,1,17,4,6,1,6,1,1,1,2,2,5,6,5,11,5,17,6,17,4,17,8,17,5,1,6,17,2,17,8,1,17,1,9,17,9,1,5,2,6,18,7,5,4,8,1,5,2,9,17,5,6,5,11,6,18,4,5,4,6,5,17,1,26,9,18,4,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,45,0,16,9,17,5,6,5,11,6,18,4,5,4,6,3,15,15,15,15,15,15,15,15,1,6,9,17,5,6,5,11,6,19,5,4,6,1,17,4,12,5,9,17,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,3,3,1,4,6,5,4,15,7,2,6,1,6,3,6,12,6,5,6,17,13,17,1,11,6,6,4,14,6,15,7,4,2,17,6,4,6,1,6,15,6,17,12,8,1,11,6,1,17,7,5,15,5,6,5,11,6,18,2,5,4,7,3,14,15,10,9,4,13,14,7,10,4,6,5,6,13,7,8,7,6,6,7,12,7,4,9,15,7,14,1,2,2,3,13,7,1,14,9,15,13,8,8,9,17,6,3,12,9,12,6,5,3,9,6,9,17,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,6,1,17,4,15,5,6,1,17,7,12,2,5,6,5,11,6,17,4,17,5,1,8,3,6,3,15,15,15,15,15,15,15,15,1,6,6,17,14,17,1,11,8,1,5,2,6,18,4,17,1,6,1,17,5,1,2,9,2,9,1,9,17,6,1,1,3,15,14,5,6,5,11,6,17,2,17,6,17,4,17,5,1,8,17,8,3,17,3,8,1,6,19,8,7,8,17,3,11,1,5,8,17,1,5,6,1,17,5,2,12,5,7,6,19,8,17,15,13,5,11,5,17,5,10,15,1,1,5,8,17,1,5,6,1,17,5,4,17,5,7,3,13,6,19,8,17,3,14,3,13,6,19,15,13,5,11,5,17,5,17,5,17,5,17,6,17,4,17,5,1,3,13,6,17,1,15,1,9,6,17,1,15,8,2,17,1,1,6,8,2,17,1,8,17,6,17,4,17,5,2,5,17,6,1,17,5,6,4,9,1,9,17,8,1,17,1,9,17,6,1,1,1,8,9,5,6,5,11,6,18,4,6,18,5,6,1,17,1,19,10,8,1,5,4,8,1,6,18,1,6,18,1,6,17,10,17,1,11,17,3,17,2,1,9,1,6,9,17,8,3,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,17,2,1,7,9,17,5,5,5,17,6,19,8,17,6,18,4,6,18,5,9,17,5,4,9,17,6,1,17,1,19,10,9,18,4,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,6,3,17,13,15,14,1,6,8,1,6,17,4,17,5,1,8,1,6,3,15,15,15,15,15,15,15,15,1,6,6,17,14,17,1,11,8,1,5,2,6,18,4,17,1,6,17,2,17,6,17,4,17,5,1,8,17,8,3,17,3,8,1,8,6,8,17,3,11,1,5,8,17,1,5,6,1,17,5,13,11,5,7,6,48,0,16,17,8,17,15,13,5,11,5,17,5,10,15,10,1,5,8,17,1,5,6,1,17,5,14,15,5,7,3,13,6,19,8,17,3,14,3,13,6,19,15,13,5,11,5,17,5,17,5,17,5,17,6,17,4,17,5,1,3,13,6,17,1,15,1,9,6,17,1,15,8,2,17,1,1,6,8,2,17,1,8,17,6,17,4,17,5,2,5,17,6,1,17,6,1,3,9,1,9,17,8,1,17,1,9,17,6,1,1,1,8,9,5,6,5,11,6,18,4,6,18,5,9,17,5,4,9,17,6,1,17,1,19,10,9,18,4,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,6,3,13,2,1,2,2,17,10,7,6,17,4,17,5,1,8,1,6,3,15,15,15,15,15,15,15,15,1,6,6,17,14,17,1,11,8,1,5,2,6,18,4,17,1,6,17,2,17,6,17,4,17,5,1,8,17,8,3,17,3,8,1,8,6,8,17,3,11,1,5,8,17,1,5,6,1,17,6,6,1,5,7,6,19,8,17,15,13,5,11,5,17,5,10,15,10,1,5,8,17,1,5,6,1,17,6,7,5,5,7,3,13,6,19,8,17,3,14,3,13,6,19,15,13,5,11,5,17,5,17,5,17,5,17,6,17,4,17,5,1,3,13,6,17,1,15,1,9,6,17,1,15,8,2,17,1,1,6,8,2,17,1,8,17,6,17,4,17,5,2,5,17,6,1,17,6,9,9,9,1,9,17,8,1,17,1,9,17,6,1,1,1,8,9,5,6,5,11,6,18,2,5,4,9,1,9,3,5,17,9,1,5,17,6,18,1,6,18,1,6,17,10,17,1,11,17,3,8,17,8,4,1,6,9,1,1,6,1,4,6,1,17,6,11,10,5,7,6,18,1,6,1,17,6,11,13,5,6,5,11,6,19,5,11,6,17,15,15,1,6,6,18,1,8,1,9,17,5,5,6,1,17,7,17,6,9,17,1,5,8,17,6,1,17,6,14,2,5,7,5,17,6,18,2,5,4,6,18,1,6,18,1,6,17,10,17,1,11,17,3,8,3,8,1,1,6,9,1,1,6,1,4,5,11,6,5,4,15,7,2,6,1,6,3,6,12,6,5,6,17,13,17,1,11,7,17,1,1,3,17,14,14,1,11,1,11,1,8,5,12,8,8,1,11,9,11,13,13,17,8,1,9,9,11,13,13,5,11,9,9,6,17,7,10,1,11,6,1,17,7,5,15,5,6,5,11,5,17,5,17,5,6,5,11,6,18,3,5,4,9,17,5,6,5,11,6,1,17,7,1,8,6,1,1,1,2,2,5,6,5,11,6,19,6,1,17,7,2,2,6,1,17,7,13,6,5,6,5,11,6,18,8,8,48,0,16,5,4,6,17,15,15,1,9,1,6,9,1,1,5,1,5,9,1,9,17,9,1,1,7,9,17,8,1,9,17,5,5,9,17,5,1,6,18,7,8,1,9,17,5,5,6,17,4,17,8,17,5,1,6,17,2,17,8,1,17,1,9,17,9,1,5,2,9,17,8,1,5,2,9,2,5,17,6,17,15,15,1,6,9,17,5,17,5,11,9,17,9,1,5,6,5,11,6,18,8,5,4,6,17,15,15,1,6,9,17,5,6,5,11,8,2,6,1,17,7,11,13,5,7,6,1,17,7,6,13,8,2,6,1,17,8,4,10,5,6,5,11,6,1,17,1,13,1,6,17,15,5,1,11,6,1,17,7,7,12,8,3,6,1,17,8,4,10,5,6,5,11,6,17,4,17,5,1,6,17,2,18,1,6,1,17,7,8,14,9,3,9,2,9,1,9,17,6,1,1,3,11,15,5,6,5,11,6,17,4,17,8,17,5,1,6,17,1,15,1,9,8,1,8,4,17,3,17,1,8,1,5,2,9,17,8,2,9,17,5,2,6,2,4,6,1,11,12,13,6,17,14,5,1,11,8,2,5,2,6,1,17,7,11,4,9,1,6,18,4,17,1,6,1,1,4,2,7,5,6,5,11,6,17,4,17,5,1,8,17,9,1,17,3,9,17,15,13,5,11,5,17,5,17,5,17,5,6,5,11,6,18,8,5,4,6,1,17,1,18,9,18,4,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,9,17,5,6,5,11,6,1,17,7,13,14,6,1,1,1,2,2,5,6,5,11,6,19,8,17,5,4,6,1,17,8,17,11,9,17,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,3,3,1,4,6,5,4,15,7,2,6,1,6,3,6,12,6,5,6,17,13,17,1,11,6,6,4,14,6,15,7,4,2,17,6,4,6,1,6,15,6,17,12,8,1,11,6,1,17,7,5,15,5,6,5,11,6,18,4,5,4,6,4,17,1,24,9,18,4,6,17,15,15,1,6,1,5,6,1,17,8,2,15,5,7,6,1,17,8,2,6,6,1,17,8,12,12,5,6,5,11,9,1,5,17,9,1,5,17,6,1,17,7,5,2,5,6,5,11,6,1,17,8,3,7,6,1,17,9,14,6,5,6,5,11,6,1,17,8,3,15,6,1,17,11,15,4,5,6,5,11,6,19,9,1,5,17,9,1,5,17,6,1,17,7,5,2,5,6,5,11,6,17,6,17,8,17,8,2,6,17,4,17,5,1,6,17,2,18,1,6,1,17,8,5,14,9,1,9,17,6,1,1,3,10,10,5,6,5,11,6,17,4,17,8,17,5,1,6,17,1,15,1,9,8,1,8,4,17,3,17,1,8,1,5,2,9,1,9,17,5,2,9,17,5,17,6,17,2,17,5,48,0,16,11,8,17,1,5,6,1,17,8,11,3,5,7,8,1,5,1,6,19,1,9,9,17,9,1,17,1,9,17,8,2,9,17,8,2,9,17,8,1,1,17,6,1,17,8,8,14,5,7,15,14,5,11,17,1,6,17,2,18,1,5,1,6,18,1,6,18,1,6,17,15,8,1,11,17,3,1,9,1,6,1,5,6,1,17,8,10,14,5,7,6,18,1,17,1,8,1,5,2,9,17,5,17,6,1,17,8,12,7,5,6,5,11,6,1,17,8,7,3,5,6,5,11,5,17,5,17,6,17,4,17,8,17,5,1,6,19,8,1,5,2,6,17,2,17,8,1,17,1,9,17,9,1,5,2,9,17,5,17,5,11,9,1,9,17,5,17,5,6,5,11,6,1,17,8,13,4,6,1,1,1,2,2,5,6,5,11,6,19,6,1,17,8,13,14,6,1,1,1,2,2,5,6,5,11,6,1,17,8,14,6,6,1,17,12,1,6,5,6,5,11,9,17,5,17,6,19,6,1,17,8,15,2,6,1,17,12,13,3,5,6,5,11,9,17,5,17,6,19,6,1,17,8,15,14,6,1,17,7,12,2,5,6,5,11,6,18,4,8,17,5,4,6,17,4,17,5,1,6,3,15,14,5,7,5,10,8,7,6,17,14,17,1,11,8,1,5,2,6,18,1,6,18,1,6,17,10,17,1,11,17,3,9,3,8,4,1,6,9,3,6,3,15,14,5,7,5,10,8,7,9,3,6,1,17,9,3,8,9,3,6,5,17,1,26,9,18,4,9,17,9,1,1,6,9,1,17,1,6,1,1,3,15,17,5,6,5,11,6,17,2,17,6,17,4,17,5,1,8,17,8,3,17,3,8,1,8,6,8,17,3,11,1,5,8,17,1,5,6,1,17,9,5,17,5,7,6,19,8,17,15,13,5,11,5,17,5,10,15,10,1,5,8,17,1,5,6,1,17,9,6,4,5,7,3,13,6,19,8,17,3,14,3,13,6,19,15,13,5,11,5,17,5,17,5,17,5,17,6,17,4,17,5,1,3,13,6,17,1,15,1,9,6,17,1,15,8,2,17,1,1,6,8,2,17,1,8,17,6,17,4,17,5,2,5,17,6,1,17,9,8,8,9,1,9,17,8,1,17,1,9,17,6,1,1,1,14,9,5,6,5,11,9,17,5,17,6,18,1,6,1,17,9,9,4,6,1,17,13,8,15,5,6,5,11,8,3,1,17,1,5,6,1,17,9,9,15,5,7,5,17,6,19,5,11,6,1,17,9,10,7,6,1,17,13,8,15,5,6,5,11,6,18,3,5,4,1,17,1,5,6,1,17,9,11,4,5,7,5,17,6,19,5,11,8,1,1,5,6,1,17,9,11,14,5,7,5,17,6,19,5,11,6,18,2,49,0,16,8,17,5,4,6,17,15,15,6,17,10,17,1,11,1,9,1,6,6,18,1,6,17,10,17,1,11,8,3,1,5,1,5,17,2,1,7,9,17,5,5,8,3,5,1,6,18,6,5,5,9,2,9,5,9,2,9,4,5,17,9,1,9,2,5,17,5,17,5,17,5,6,5,11,6,18,4,5,4,6,18,1,5,4,6,5,17,1,26,9,17,9,1,17,4,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,9,17,6,19,9,17,1,5,6,1,17,10,7,14,5,7,8,1,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,6,3,5,10,3,13,5,4,9,3,6,17,4,17,5,1,8,1,6,3,15,15,15,15,15,15,15,15,1,6,6,17,14,17,1,11,8,1,5,2,6,18,4,17,1,6,17,2,17,6,17,4,17,5,1,8,17,8,3,17,3,8,1,8,6,8,17,3,11,1,5,8,17,1,5,6,1,17,10,4,1,5,7,6,19,8,17,15,13,5,11,5,17,5,10,15,10,1,5,8,17,1,5,6,1,17,10,5,5,5,7,3,13,6,19,8,17,3,14,3,13,6,19,15,13,5,11,5,17,5,17,5,17,5,17,6,17,4,17,5,1,3,13,6,17,1,15,1,9,6,17,1,15,8,2,17,1,1,6,8,2,17,1,8,17,6,17,4,17,5,2,5,17,6,1,17,10,7,9,9,1,9,17,8,1,17,1,9,17,6,1,1,2,5,4,5,6,5,11,6,1,17,10,14,15,5,6,5,11,8,1,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,6,3,5,9,17,9,12,17,13,5,6,17,4,17,5,1,8,1,6,3,15,15,15,15,15,15,15,15,1,6,6,17,14,17,1,11,8,1,5,2,6,18,4,17,1,6,17,2,17,6,17,4,17,5,1,8,17,8,3,17,3,8,1,8,6,8,17,3,11,1,5,8,17,1,5,6,1,17,10,11,7,5,7,6,19,8,17,15,13,5,11,5,17,5,10,15,10,1,5,8,17,1,5,6,1,17,10,12,11,5,7,3,13,6,19,8,17,3,14,3,13,6,19,15,13,5,11,5,17,5,17,5,17,5,17,6,17,4,17,5,1,3,13,6,17,1,15,1,9,6,17,1,15,8,2,17,1,1,6,8,2,17,1,8,17,6,17,4,17,5,2,5,17,6,1,17,10,14,15,9,1,9,17,8,1,17,1,9,17,6,1,1,2,5,4,5,6,5,11,9,17,5,17,6,19,8,17,6,19,8,4,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,6,3,17,9,17,2,15,1,10,12,6,17,4,17,5,1,8,1,6,3,15,15,15,15,15,15,15,50,0,16,15,1,6,6,17,14,17,1,11,8,1,5,2,6,18,4,17,1,6,17,6,17,6,17,4,17,5,1,8,17,8,3,17,3,8,1,8,6,8,17,3,11,1,5,8,17,1,5,6,1,17,11,2,15,5,7,6,19,8,17,15,13,5,11,5,17,5,10,15,10,1,5,8,17,1,5,6,1,17,11,4,3,5,7,3,13,6,19,8,17,3,14,3,13,6,19,15,13,5,11,5,17,5,17,5,17,5,17,6,17,4,17,5,1,3,13,6,17,1,15,1,9,6,17,1,15,8,2,17,1,1,6,8,2,17,1,8,17,6,17,4,17,5,2,5,17,6,1,17,11,6,7,9,1,9,17,8,1,17,1,9,17,6,1,1,2,17,7,5,6,5,11,9,2,5,17,9,2,5,17,9,2,5,17,8,2,6,18,1,6,18,1,6,17,7,17,1,11,17,3,1,6,6,19,1,4,1,5,8,17,1,5,6,1,17,11,8,15,5,7,5,17,6,18,1,6,18,1,6,17,7,17,1,11,17,3,8,2,1,6,1,5,1,5,5,11,8,17,1,5,6,1,17,11,10,17,5,7,5,17,6,3,15,15,15,15,15,15,15,15,8,1,1,6,1,5,1,5,5,11,1,5,6,1,17,11,14,13,5,7,6,18,5,8,4,9,17,5,5,6,18,4,8,17,5,4,6,4,17,1,24,6,3,15,15,15,15,15,15,15,15,1,9,9,17,9,1,1,6,6,3,15,15,15,15,15,15,15,15,8,4,1,6,1,7,6,4,15,15,24,1,9,1,6,1,7,9,17,5,5,6,18,1,5,4,1,5,6,1,17,11,13,14,5,7,8,2,6,1,17,11,14,17,5,6,5,11,8,1,5,11,6,18,1,6,18,1,6,17,7,17,1,11,17,3,1,6,6,18,3,5,5,5,11,5,17,5,17,5,17,5,17,5,17,5,6,5,11,6,1,17,11,15,12,6,1,1,1,2,2,5,6,5,11,5,17,6,17,4,17,8,17,5,1,6,17,2,17,8,1,17,1,9,17,9,1,5,2,6,7,17,13,14,17,11,6,11,3,10,7,6,4,20,8,1,5,2,9,17,5,6,5,11,6,1,17,12,1,14,6,1,1,1,2,2,5,6,5,11,6,19,8,17,6,19,6,1,17,12,4,1,6,18,4,6,18,5,9,17,5,4,9,17,6,1,17,1,19,10,9,18,4,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,6,1,17,13,9,6,5,6,5,11,6,18,4,5,4,6,18,1,5,4,9,3,9,6,5,17,9,1,9,4,5,17,9,2,5,17,6,3,15,15,15,15,15,15,15,15,1,6,8,2,17,3,9,17,6,19,9,52,0,16,1,5,6,1,17,12,6,6,5,7,8,3,6,1,17,12,6,8,5,6,5,11,8,4,5,11,9,17,5,17,6,1,17,12,7,2,6,1,1,1,2,2,5,6,5,11,6,1,17,12,9,3,8,3,6,3,15,15,15,15,15,15,15,15,1,6,6,18,5,5,4,8,4,17,3,8,1,6,1,17,12,8,8,5,7,15,14,5,11,17,4,6,18,1,6,17,7,17,1,11,6,1,17,15,6,11,5,6,5,11,6,18,4,8,17,5,4,6,3,15,15,15,15,15,15,15,15,1,9,1,6,6,3,15,15,15,15,15,15,15,15,8,7,8,1,1,6,9,1,9,17,9,1,1,7,9,17,9,1,5,5,6,18,5,8,4,9,17,5,5,9,17,9,1,5,17,6,1,17,12,12,8,9,17,8,2,9,17,6,4,14,8,13,4,10,5,1,19,9,17,6,1,17,15,9,12,1,6,5,6,5,11,9,6,5,17,5,17,5,17,5,17,5,17,5,17,5,17,9,17,5,6,5,11,6,19,8,17,6,18,3,5,4,9,17,5,17,6,19,8,17,6,18,4,6,18,5,9,17,5,4,9,17,6,1,17,1,19,10,9,18,4,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,6,3,17,9,17,2,15,1,10,12,6,17,4,17,5,1,8,1,6,3,15,15,15,15,15,15,15,15,1,6,6,17,14,17,1,11,8,1,5,2,6,18,4,17,1,6,17,6,17,6,17,4,17,5,1,8,17,8,3,17,3,8,1,8,6,8,17,3,11,1,5,8,17,1,5,6,1,17,13,2,12,5,7,6,19,8,17,15,13,5,11,5,17,5,10,15,10,1,5,8,17,1,5,6,1,17,13,4,17,5,7,3,13,6,19,8,17,3,14,3,13,6,19,15,13,5,11,5,17,5,17,5,17,5,17,6,17,4,17,5,1,3,13,6,17,1,15,1,9,6,17,1,15,8,2,17,1,1,6,8,2,17,1,8,17,6,17,4,17,5,2,5,17,6,1,17,13,6,4,9,1,9,17,8,1,17,1,9,17,6,1,1,2,17,7,5,6,5,11,5,17,9,1,5,17,9,1,5,17,6,18,1,5,4,6,19,1,4,6,1,17,13,7,9,5,7,8,1,6,1,17,13,7,11,5,6,5,11,8,17,5,11,6,18,1,6,18,1,6,17,7,17,1,11,17,3,1,6,6,18,3,5,5,5,17,9,17,9,1,5,17,5,17,9,17,5,6,5,11,6,2,9,8,9,6,8,17,9,17,5,6,5,11,6,19,8,17,6,19,6,1,17,13,10,3,6,1,17,15,12,3,5,6,5,11,9,17,5,17,8,3,6,18,1,6,52,0,16,18,1,6,17,10,17,1,11,17,3,1,6,6,3,5,9,17,9,12,17,13,5,6,17,4,17,5,1,8,1,6,3,15,15,15,15,15,15,15,15,1,6,6,17,14,17,1,11,8,1,5,2,6,18,4,17,1,6,17,2,17,6,17,4,17,5,1,8,17,8,3,17,3,8,1,8,6,8,17,3,11,1,5,8,17,1,5,6,1,17,13,13,14,5,7,6,19,8,17,15,13,5,11,5,17,5,10,15,10,1,5,8,17,1,5,6,1,17,13,15,2,5,7,3,13,6,19,8,17,3,14,3,13,6,19,15,13,5,11,5,17,5,17,5,17,5,17,6,17,4,17,5,1,3,13,6,17,1,15,1,9,6,17,1,15,8,2,17,1,1,6,8,2,17,1,8,17,6,17,4,17,5,2,5,17,6,1,17,14,1,6,9,1,9,17,8,1,17,1,9,17,6,1,1,2,5,4,5,6,5,11,9,2,5,17,8,3,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,6,3,5,10,3,13,5,4,9,3,6,17,4,17,5,1,8,1,6,3,15,15,15,15,15,15,15,15,1,6,6,17,14,17,1,11,8,1,5,2,6,18,4,17,1,6,17,2,17,6,17,4,17,5,1,8,17,8,3,17,3,8,1,8,6,8,17,3,11,1,5,8,17,1,5,6,1,17,14,5,1,5,7,6,19,8,17,15,13,5,11,5,17,5,10,15,10,1,5,8,17,1,5,6,1,17,14,6,5,5,7,3,13,6,19,8,17,3,14,3,13,6,19,15,13,5,11,5,17,5,17,5,17,5,17,6,17,4,17,5,1,3,13,6,17,1,15,1,9,6,17,1,15,8,2,17,1,1,6,8,2,17,1,8,17,6,17,4,17,5,2,5,17,6,1,17,14,8,9,9,1,9,17,8,1,17,1,9,17,6,1,1,2,5,4,5,6,5,11,9,1,5,17,6,19,8,17,6,19,8,6,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,6,3,17,9,17,2,15,1,10,12,6,17,4,17,5,1,8,1,6,3,15,15,15,15,15,15,15,15,1,6,6,17,14,17,1,11,8,1,5,2,6,18,4,17,1,6,17,6,17,6,17,4,17,5,1,8,17,8,3,17,3,8,1,8,6,8,17,3,11,1,5,8,17,1,5,6,1,17,14,12,9,5,7,6,19,8,17,15,13,5,11,5,17,5,10,15,10,1,5,8,17,1,5,6,1,17,14,13,13,5,7,3,13,6,19,8,17,3,14,3,13,6,19,15,13,5,11,5,17,5,17,5,17,5,17,6,17,4,17,5,1,3,13,6,17,1,15,1,9,6,17,1,15,8,2,17,1,1,6,8,2,17,1,8,17,6,17,4,17,5,2,5,17,6,1,17,15,53,0,16,17,1,9,1,9,17,8,1,17,1,9,17,6,1,1,2,17,7,5,6,5,11,9,2,5,17,9,2,5,17,9,2,5,17,8,3,6,3,15,15,15,15,15,15,15,15,1,6,8,1,6,3,15,15,15,15,15,15,15,15,1,6,1,4,6,1,17,15,6,1,5,7,8,17,8,4,17,3,6,3,15,15,15,15,15,15,15,15,8,1,1,6,6,1,17,15,2,14,8,4,8,6,6,1,17,15,12,13,5,6,5,11,5,1,6,18,1,6,18,1,6,17,14,17,1,11,17,3,1,6,17,2,9,6,9,17,9,6,17,1,9,5,6,3,15,15,15,15,15,15,15,15,8,1,1,6,6,1,17,15,4,15,8,5,8,5,6,1,17,15,12,13,5,6,5,11,5,1,6,18,1,6,18,1,6,17,14,17,1,11,17,3,1,6,17,2,9,5,9,17,9,5,17,1,9,4,5,17,5,11,5,17,5,17,5,17,9,1,9,3,9,17,9,2,5,17,5,6,5,11,6,1,17,15,7,3,6,1,1,1,2,2,5,6,5,11,6,17,4,17,5,1,8,17,6,17,2,18,1,6,17,4,17,5,2,8,17,6,1,17,15,9,1,8,5,6,7,17,13,14,17,11,6,11,3,10,7,6,4,20,8,6,6,1,1,17,4,8,5,6,5,11,9,17,5,2,9,17,5,17,5,11,9,2,9,1,5,17,5,17,5,6,5,11,6,1,17,15,10,4,6,1,1,1,2,2,5,6,5,11,6,17,4,17,8,17,5,1,6,17,2,17,8,1,17,1,9,17,9,1,5,2,8,3,5,1,8,1,9,17,6,1,17,15,9,1,9,17,8,5,6,3,15,15,15,15,15,15,15,15,6,1,1,17,7,4,1,6,5,6,5,11,6,3,15,15,15,15,15,15,15,15,4,2,1,6,9,17,5,6,5,11,6,1,17,15,13,5,6,1,1,1,3,5,5,6,5,11,6,19,8,2,6,18,1,6,18,1,6,17,7,17,1,11,17,3,1,6,1,1,6,1,17,15,15,14,5,7,6,17,4,17,5,1,6,2,4,6,1,11,12,13,6,17,14,5,1,11,8,1,5,2,6,18,4,17,1,6,1,17,7,11,4,9,17,6,1,1,4,4,8,5,6,5,11,6,17,4,17,8,17,5,1,6,17,2,17,8,1,17,1,9,17,9,1,5,2,8,17,6,18,1,6,18,1,6,17,7,17,1,11,17,3,8,4,1,6,6,13,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,6,17,7,17,1,11,6,17,7,17,8,7,9,17,1,11,1,6,8,1,6,1,1,17,3,3,5,7,15,14,5,11,17,4,6,18,1,6,18,1,6,17,14,17,1,11,17,3,1,6,8,1,5,2,5,17,9,17,5,17,9,2,9,54,0,16,1,5,17,5,17,5,6,5,11,6,19,6,1,1,17,6,10,8,2,6,1,1,17,5,14,8,6,8,6,6,3,15,15,15,15,15,15,15,15,6,1,1,17,7,4,1,6,5,6,5,11,9,17,6,3,15,15,15,15,15,15,15,15,6,1,1,17,10,14,1,6,5,6,5,11,9,17,5,17,5,11,9,3,9,2,5,17,5,17,5,17,5,6,5,11,6,19,8,2,6,1,1,17,8,3,5,7,5,17,6,19,6,1,17,15,9,6,5,6,5,11,8,2,8,2,17,2,8,2,8,4,8,2,8,1,6,1,1,17,9,17,5,7,15,14,5,11,17,4,1,4,6,1,1,17,6,13,5,7,6,17,4,17,5,1,6,2,4,6,1,11,12,13,6,17,14,5,1,11,8,1,5,2,6,18,4,17,1,6,1,17,7,11,4,9,17,6,1,1,4,3,8,5,6,5,11,6,19,6,1,1,17,6,13,8,3,8,3,6,17,4,17,5,1,8,17,6,17,4,18,1,6,17,4,17,5,2,8,17,6,17,1,10,8,1,5,2,6,17,2,18,1,7,15,5,3,6,1,6,6,6,5,4,13,6,1,7,4,6,8,3,10,2,17,6,4,6,9,7,6,6,9,7,3,6,9,6,15,6,14,2,17,6,2,7,9,2,17,7,10,6,5,7,2,6,15,28,8,1,5,2,5,17,6,19,8,1,8,3,6,1,1,1,17,12,5,7,6,17,4,17,5,1,6,2,4,6,1,11,12,13,6,17,14,5,1,11,8,1,5,2,6,18,4,17,1,6,1,17,7,11,4,9,1,9,17,6,1,1,4,2,7,5,6,5,11,5,17,6,19,8,3,8,5,8,1,6,1,1,1,1,8,5,7,15,14,5,11,17,4,9,5,9,4,5,17,5,17,5,17,5,17,5,17,5,6,5,11,6,17,4,17,5,1,8,17,6,17,2,18,1,6,17,4,17,5,2,8,17,6,19,8,1,5,2,5,17,9,17,5,6,5,11,6,17,4,17,8,17,5,1,6,17,2,17,8,1,17,1,9,17,9,1,5,2,6,19,8,1,5,2,9,17,5,6,5,11,8,17,3,5,6,1,17,15,9,6,8,1,6,1,1,5,1,3,5,6,5,11,8,17,5,1,6,1,17,15,9,6,8,1,6,1,1,5,1,3,5,6,5,11,8,17,5,1,6,1,17,15,9,6,8,1,6,1,1,5,2,10,5,6,5,11,8,17,5,1,6,1,17,15,9,6,8,1,6,1,1,5,3,3,5,6,5,11,8,17,5,1,6,1,17,15,9,6,8,1,6,1,1,5,3,12,5,6,5,11,8,17,5,1,6,1,17,15,9,6,8,1,6,1,1,5,4,5,5,6,5,11,6,19,6,17,2,17,8,2,8,4,17,3,1,2,55,0,16,1,5,6,1,1,1,9,11,5,7,6,19,8,17,15,13,5,11,6,19,6,1,1,1,10,7,8,4,8,4,6,1,1,1,5,2,5,6,5,11,9,4,9,3,5,17,5,17,5,17,5,17,5,6,5,11,6,19,8,17,6,17,4,17,8,3,8,5,17,3,1,2,1,5,6,1,1,1,12,2,5,7,6,19,8,17,15,13,5,11,6,19,6,1,1,1,12,14,8,5,8,5,6,1,1,1,4,7,5,6,5,11,9,2,5,17,5,17,6,17,2,17,6,1,1,1,13,15,8,5,8,2,8,6,17,1,6,1,1,1,4,7,5,6,5,11,9,1,5,17,5,17,9,2,5,17,9,2,9,17,5,17,5,6,5,11,6,19,6,17,2,17,8,2,8,4,17,3,1,2,1,5,6,1,1,1,15,11,5,7,6,19,8,17,15,13,5,11,6,19,6,1,1,1,10,7,8,4,8,4,6,1,1,1,5,13,5,6,5,11,6,19,8,17,6,19,6,17,6,17,8,4,8,6,17,3,1,2,1,5,6,1,1,2,1,12,5,7,6,19,8,17,15,13,5,11,6,19,6,1,1,2,2,8,8,6,8,6,6,1,1,1,6,8,5,6,5,11,9,3,5,17,5,17,6,17,2,17,6,1,1,2,3,9,8,6,8,2,8,7,17,1,6,1,1,1,6,8,5,6,5,11,9,2,5,17,5,17,6,17,4,17,6,1,1,2,4,10,8,6,8,2,8,7,17,1,6,1,1,1,7,14,5,6,5,11,9,1,5,17,5,17,9,2,5,17,9,2,5,17,9,2,5,6,5,11,6,19,6,17,2,17,8,2,8,4,17,3,1,2,1,5,6,1,1,2,6,6,5,7,6,19,8,17,15,13,5,11,6,19,6,1,1,1,10,7,8,4,8,4,6,1,1,1,7,3,5,6,5,11,6,1,1,2,7,11,8,1,6,1,1,4,9,12,5,6,5,11,8,2,5,2,5,17,5,17,5,6,5,11,6,1,1,2,7,11,8,1,6,1,1,4,10,7,5,6,5,11,6,1,1,2,7,11,6,1,1,2,9,6,8,2,6,1,1,4,10,12,5,6,5,11,6,1,1,4,11,9,5,6,5,11,6,1,1,2,7,11,6,1,1,2,9,6,8,2,6,1,1,4,11,9,5,6,5,11,6,19,6,1,1,2,11,2,8,2,6,1,1,4,8,15,5,6,5,11,6,1,1,2,11,12,8,1,8,5,6,1,17,8,12,7,5,6,5,11,9,3,5,17,6,1,1,2,12,12,8,1,8,5,6,17,2,17,8,6,17,1,6,1,1,4,13,13,5,6,5,11,9,2,9,17,9,2,17,1,9,2,9,1,5,17,5,17,5,6,5,11,6,19,6,1,1,2,14,1,8,2,6,1,1,4,8,56,0,16,15,5,6,5,11,6,1,1,2,14,11,8,1,8,5,6,1,1,4,9,3,5,6,5,11,9,3,5,17,6,1,1,2,15,11,8,1,8,5,6,17,2,17,8,6,17,1,6,1,1,4,13,13,5,6,5,11,6,1,1,3,17,4,8,1,6,1,1,5,17,9,5,6,5,11,9,17,9,3,17,1,9,3,9,2,5,17,5,17,5,17,5,6,5,11,6,19,6,1,1,3,1,11,6,17,2,1,8,3,6,1,1,4,9,3,5,6,5,11,7,15,5,3,6,1,6,6,6,5,4,13,6,1,7,4,6,8,3,10,2,17,6,13,7,5,6,12,7,4,6,9,7,17,6,12,6,9,6,3,6,1,7,4,6,9,6,15,6,14,2,17,6,15,7,6,6,5,7,2,6,6,6,12,6,15,8,1,5,2,6,17,7,7,6,17,15,8,1,11,6,17,2,17,8,2,17,1,5,2,6,17,4,18,1,9,2,9,1,5,17,5,17,5,6,5,11,6,19,6,1,1,3,5,14,6,17,2,17,8,3,6,1,1,4,9,3,5,6,5,11,7,15,4,6,6,9,7,8,6,5,6,4,5,17,6,15,6,9,6,14,7,4,3,10,2,17,4,4,4,9,5,6,5,15,4,2,5,9,5,15,5,10,4,5,5,2,4,15,5,15,4,6,5,2,4,1,4,3,5,4,4,9,4,15,4,14,8,1,5,2,6,17,2,18,1,9,2,9,1,5,17,5,17,5,6,5,11,8,17,5,1,6,17,2,17,8,3,17,1,9,17,6,1,1,3,9,11,8,4,8,2,6,1,1,3,10,1,5,6,5,11,5,17,5,17,5,17,5,17,5,6,5,11,6,1,1,2,7,11,8,1,6,1,1,4,11,9,5,6,5,11,6,19,6,1,1,3,11,6,8,2,8,4,6,1,1,2,9,11,5,6,5,11,5,17,6,17,2,18,1,9,1,9,17,5,17,5,6,5,11,6,19,6,1,1,3,12,11,8,2,8,6,6,1,1,2,10,7,5,6,5,11,9,1,5,17,6,1,1,3,13,7,8,2,8,5,6,1,1,2,8,10,5,6,5,11,6,18,2,8,2,17,1,9,1,5,17,6,1,1,3,14,7,8,2,8,4,6,1,1,2,10,7,5,6,5,11,9,5,9,4,5,17,5,17,5,17,5,17,5,17,5,6,5,11,6,17,2,17,8,1,17,1,6,1,17,15,9,6,8,2,8,4,6,1,1,2,7,2,5,6,5,11,6,17,4,17,8,1,17,1,6,1,1,4,17,12,8,2,8,5,6,1,1,2,7,2,5,6,5,11,6,1,1,17,6,13,6,17,2,17,8,3,17,1,8,4,6,1,1,2,7,2,5,6,5,11,6,17,2,17,8,1,17,1,6,1,17,15,9,6,8,2,8,4,6,1,1,2,8,1,5,6,5,11,6,17,2,17,8,17,8,2,5,2,57,0,16,8,1,17,1,6,1,1,17,6,13,8,1,8,4,6,1,1,2,13,6,5,6,5,11,6,17,2,17,8,17,8,2,5,2,8,1,17,1,6,1,17,15,9,6,8,1,6,1,1,3,17,14,5,6,5,11,6,17,2,17,8,17,8,2,5,2,8,1,17,1,6,1,17,15,9,6,8,1,6,1,1,3,5,1,5,6,5,11,6,17,2,17,8,1,17,1,6,1,17,15,9,6,8,2,8,4,6,1,1,3,8,10,5,6,5,11,6,17,4,17,8,1,17,1,6,1,1,4,7,4,8,2,8,5,6,1,1,3,8,10,5,6,5,11,6,1,1,17,6,13,6,17,2,17,8,3,17,1,8,4,6,1,1,2,8,1,5,6,5,11,6,17,2,17,8,1,17,1,6,1,17,15,9,6,8,2,8,4,6,1,1,3,10,1,5,6,5,11,5,1,9,17,5,6,5,11,9,17,8,1,5,2,6,17,2,18,1,9,17,5,6,5,11,6,19,6,1,17,15,9,6,8,2,6,1,1,4,12,8,5,6,5,11,1,5,1,5,9,17,5,6,5,11,6,18,1,6,18,1,6,17,15,17,1,11,17,3,1,9,1,6,9,17,5,6,5,11,9,17,5,6,5,11,6,18,1,6,18,1,6,17,7,17,1,11,17,3,1,6,9,17,5,6,5,11,6,18,1,6,18,1,6,17,10,17,1,11,17,3,1,6,9,17,5,6,5,11,6,3,15,15,15,15,15,15,15,15,1,6,9,17,5,6,5,11,6,19,5,11,8,3,8,1,1,17,1,5,6,1,1,4,15,8,5,7,8,1,8,1,17,1,5,1,8,3,8,2,17,1,5,2,6,17,2,18,1,6,1,1,4,14,17,5,6,5,11,8,3,8,1,1,1,1,5,6,1,1,3,9,11,5,7,5,17,5,17,6,19,9,1,17,1,5,2,5,6,5,11,6,17,1,15,17,1,6,17,1,15,1,9,1,6,9,17,5,6,5,11,6,1,1,5,1,12,8,1,6,1,1,4,9,12,5,6,5,11,8,1,1,4,6,1,1,5,2,7,5,7,6,19,8,17,15,13,5,11,5,17,5,6,5,11,6,1,1,5,1,12,8,1,6,1,1,4,10,7,5,6,5,11,6,1,1,5,1,12,8,1,6,1,1,4,11,12,5,6,5,11,6,1,1,5,1,12,8,1,6,1,1,4,11,9,5,6,5,11,6,1,1,5,1,12,8,1,6,1,1,4,13,4,5,6,15,14,10,3,6,5,6,2,7,10,7,10,7,2,3,1,5,8,2,17,5,10,10,5,3,11,11,1,5,14,10,9,11,10,12,10,4,13,10,7,11,3,13,17,10,3,12,2,3,7,6,1,1,15,10,4,17,15,12,2,7,8,7,3,7,13,13,1,14,2,15,15,17,3,5,6,2,2,17,3,1,3,12,13,6,12,6,5,7,58,0,16,8,7,17,6,5,7,2,6,9,6,13,6,5,6,14,7,4,6,1,6,12,15,5,6,4,7,3,6,15,6,12,6,3,4,3,19,5,1,1,18,4,17,10,3,6,5,6,2,7,10,7,10,7,2,3,1,5,8,2,17,8,4,10,4,11,1,4,17,14,2,10,1,2,17,13,5,17,8,6,8,12,6,2,5,13,9,3,4,7,4,15,14,1,17,2,15,12,2,7,6,11,1,6,14,14,9,3,5,13,11,1,10,15,4,8,7,14,8,14,5,13,17,1,11,6,12,6,5,7,8,7,17,6,5,7,2,6,9,6,13,6,5,6,14,7,4,6,1,6,12,15,5,6,4,7,3,6,15,6,12,6,3,4,3,19,5,1,1,18,4,17,8,3,17,1,5,17,15,4,10,17,8,12,9,3,9,6,2,17,9,8,9,3,6,1,18,10,7,13,11,15,3,8,14,14,2,1,3,4,8,10,15,4,2,11,13,7,2,2,13,5,3,17,3,17,11,14,5,10,14,13,9,11,14,9,1,5,10,11,14,6,8,1,9,10,17,1,7,9,11,14,7,6,15,14,3,6,11,5,13,6,11,10,8,1,17,15,5,7,8,5,2,9,3,17,2,8,4,11,2,7,8,10,15,8,14,5,12,12,12,2,14,15,11,3,15,9,8,6,12,1,8,8,3,9,11,4,5,7,5,12,17,8,17,8,404,0 | |
}; | |
std::map<int, int> inst_freq_map; | |
for (int i=0; i<inst.size(); i++) { | |
inst_freq_map[inst[i]]++; | |
} | |
std::vector<unsigned short> new_inst = remap_data(inst_freq_map, inst); | |
std::vector<unsigned short> orgin_test = fib_decode_many(0); | |
std::cout << "orgin_test.size(): " << orgin_test.size() << std::endl; | |
std::cout << "fibLookup.size(): " << fibLookup.size() << std::endl; | |
//std::cout << "inst: " << join_string(inst, ",") << std::endl; | |
//std::cout << "orgin_test: " << join_string(orgin_test, ",") << std::endl; | |
std::cout << "is same: " << ((orgin_test == inst) ? "YES" : "NO") << std::endl; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment