#include <functional>
#include <iostream>
using namespace std;
/**
* Checks if node is adj to all nodes in subgraph.
*
* @param node the node to check for adjacency all other nodes in the subgraph
* @param subgraph an array of node integers
* @param len the length of the subgraph array
* @param adj a function accepting two integers corresponding to nodes and returns
* whether they are adjacent
* @returns whether node is adjacent to all nodes in subgraph.
*/
inline bool adj_all(int node, int* subgraph, int len, const function<bool(int, int)> &adj){
for(int i = 0;i < len;i++){
//cout << "Comparing with " << nodes[chain[i]] << "." << endl;
if(i == node || !adj(subgraph[i], node)) {
return false;
}
}
return true;
}
/**
* Finds the size of the maximal clique in the graph.
*
* @param num_nodes the number of nodes
* @param adj a function accepting two integers corresponding to nodes and returns
* whether they are adjacent
* @returns the size of the maximal clique.
*/
int max_clique(int num_nodes, const function<bool(int, int)> &adj)
{
if(num_nodes <= 0)
return 0;
// Holds indices into nodes of current clique. Permuted to check every subgraph.
// The stack is kept in sorted order (solely by nature of how it is incremented/permuted) so
// as to only check each subgraph once.
int stack[num_nodes + 1];
stack[0] = 0;
// Holds the current index in the stack to permute.
int index = 0;
// Holds the size of the largest clique found.
int max_len = 0;
while(index >= 0) {
bool complete = true;
// Down the tree. Add new nodes to the stack while we can find a neighbor to the
// top node on the stack that is also adjacent to all nodes in the stack.
while(complete) {
// Find a neighbor.
complete = false; // This will stay false if no neighbor is found.
for(int i = stack[index] + 1;!complete && i < num_nodes;i++) {
if(adj_all(i, stack, index + 1, adj)) {
stack[index + 1] = i; // Add this node to the stack.
index++; // Advance the stack pointer.
complete = true;
}
}
}
complete = false;
if(index + 1 > max_len) {
max_len = index + 1;
}
while(!complete && index >= 0) {
do {
// If we get here, no suitable neighbor could be found for the top node on the
// stack.
// So we will permute the last neighbor on the stack.
stack[index]++;
complete = adj_all(stack[index], stack, index, adj);
} while(!complete && stack[index] < num_nodes);
if(stack[index] >= num_nodes) {
// If we get here, we've tried all possibilities for top node on the stack and
// none of them were complete with the rest of the stack, so we need to pop the
// node off the stack and start permuting the node below it.
index--; // Pop the stack.
stack[index]++;
complete = adj_all(stack[index], stack, index, adj);
}
}
}
return max_len;
}
/**
* Whether two nodes are adjacent.
*/
bool adj1(int n1, int n2) {
static int connects[9][9] = {
{0,1,1,1,0,0,1,1,1},
{1,0,1,1,0,0,0,1,1},
{1,1,0,1,1,1,0,0,1},
{1,1,1,0,1,1,1,0,0},
{0,0,1,1,0,1,1,0,0},
{0,0,1,1,1,0,1,1,1},
{1,0,0,1,1,1,0,1,1},
{1,1,0,0,0,1,1,0,1},
{1,1,1,0,0,1,1,1,0}};
return connects[n1][n2];
}
/**
* Whether two nodes are adjacent.
*/
bool adj2(int n1, int n2) {
static int connects[23][23] = {
{0,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0},
{0,0,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1},
{1,1,0,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,0,1,0},
{0,1,0,0,1,1,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,0,1},
{1,1,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,0},
{0,1,1,1,1,0,1,1,0,1,1,1,0,1,1,1,0,0,1,1,1,1,1},
{1,0,1,0,1,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,1,1,1},
{1,0,0,1,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1},
{1,0,0,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1},
{1,1,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,0,1,1,1,1},
{1,1,1,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1},
{1,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,0,1,1,1},
{1,1,1,0,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,1},
{1,1,1,1,0,1,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1},
{1,1,1,1,1,1,1,0,1,1,1,0,1,1,0,1,1,0,1,1,0,0,1},
{1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,0,1,1,0,1,0,0,1},
{1,1,1,1,1,0,1,1,1,0,1,1,1,0,1,1,0,1,1,0,1,0,1},
{1,1,1,1,1,0,0,1,1,1,0,1,1,1,0,1,1,0,1,1,1,1,0},
{0,1,1,1,1,1,1,1,1,0,0,0,1,1,1,0,1,1,0,1,1,1,1},
{1,0,1,1,1,1,1,1,1,1,0,0,0,1,1,1,0,1,1,0,0,1,0},
{0,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,0,0,1,1},
{1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,0,0},
{0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,0}};
return connects[n1][n2];
}
/**
* Whether two nodes are adjacent.
*/
bool adj3(int n1, int n2) {
static int connects[41][41] = {
{0,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,0,0,1,0,1,1,1,0,1,1,1,1,1,1,1,1},
{1,0,1,1,1,1,1,1,1,1,0,1,1,0,0,1,0,0,1,1,1,1,1,1,1,0,1,0,0,0,1,1,1,0,1,1,1,1,1,1,1},
{1,1,0,1,1,1,1,1,1,0,1,0,1,1,0,1,0,0,0,1,1,1,1,1,1,0,1,1,1,0,0,1,0,1,0,1,1,1,1,1,1},
{1,1,1,0,1,1,1,1,1,1,0,1,0,1,1,1,1,0,0,0,1,1,1,1,1,1,0,1,1,1,0,0,1,0,1,0,1,1,1,1,1},
{1,1,1,1,0,1,1,1,1,0,1,0,1,1,1,0,1,1,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,1,0,1,0,1,1,1,1},
{1,1,1,1,1,0,1,1,1,1,0,1,0,1,1,0,0,1,1,0,0,0,1,1,1,1,0,0,0,1,1,1,1,0,1,0,1,0,1,1,1},
{1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,0,1,0,1,0,1,1},
{1,1,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,1,0,1,1,0,0,0,1,1,1,1,1,1,0,1,1,1,1,0,1,0,1,0,1},
{1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,0,1,1,0,0,0,1,1,1,0,1,1,0,1,1,1,1,0,1,0,1,0},
{0,1,0,1,0,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1,1,0,1,1,1,1,1,1,0,1,1,1,0,0,1,1,1},
{1,0,1,0,1,0,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1,1,0,1,1,1,1,1,1,0,1,1,1,0,0,1,1},
{1,1,0,1,0,1,0,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,1,0,1,1,1,0,0,1},
{1,1,1,0,1,0,1,0,1,1,1,1,0,1,1,1,0,1,0,1,1,1,1,1,0,0,0,0,1,1,1,1,0,1,1,0,1,1,1,0,0},
{0,0,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,0,1,0,1,0,1,1,0,1,0,0,0,1,1,1,1,0,0,0,1,1,0,1},
{1,0,0,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,0,1,0,1,0,1,0,1,1,0,0,0,1,1,1,1,0,0,0,1,1,0},
{0,1,1,1,0,0,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0},
{0,0,0,1,1,0,1,1,1,1,0,1,0,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,1,1,1,1},
{1,0,0,0,1,1,0,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,0,0,1,0,0,1,1,1,1,1,1,1},
{1,1,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1,0,1,0,1,1,0,0,0,0,0,1,1,1,1,1,1},
{1,1,1,0,0,0,1,1,0,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,0,1,0,0,0,1,1,1,1,1},
{1,1,1,1,0,0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,1,1,1,1},
{1,1,1,1,1,0,0,0,1,0,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1},
{1,1,1,1,1,1,0,0,0,0,0,1,1,0,1,0,1,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,1,0,1,1,0,0,0,1,1},
{1,1,1,1,1,1,1,0,0,1,0,0,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,0,1,1,0,0,0,1},
{1,1,1,1,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,0},
{0,0,0,1,1,1,1,1,1,0,1,1,0,0,0,1,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,0,0,1,1,1,0},
{0,1,1,0,0,0,1,1,1,1,0,0,0,1,1,0,1,0,1,0,1,0,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1},
{1,0,1,1,0,0,0,1,1,1,1,0,0,0,1,0,1,1,0,1,0,1,0,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0},
{0,0,1,1,1,0,1,1,0,1,1,1,1,0,0,0,0,1,1,1,1,1,0,1,0,1,1,1,0,1,1,1,1,0,1,0,1,0,1,1,1},
{1,0,0,1,1,1,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,0,1,0,1,0,1,1},
{1,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,0,1,0,1,0,1},
{1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,0,1,0,1,0},
{0,1,0,1,0,1,1,1,1,0,1,1,0,1,1,1,0,0,0,1,1,0,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1},
{1,0,1,0,1,0,1,1,1,1,0,1,1,1,1,1,1,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1,1},
{1,1,0,1,0,1,0,1,1,1,1,0,1,0,1,1,1,1,0,0,0,1,1,0,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1},
{1,1,1,0,1,0,1,0,1,1,1,1,0,0,0,1,1,1,1,0,0,0,1,1,0,0,1,1,0,1,0,1,1,1,1,0,1,1,1,1,1},
{1,1,1,1,0,1,0,1,0,0,1,1,1,0,0,1,1,1,1,1,0,0,0,1,1,0,1,1,1,0,1,0,1,1,1,1,0,1,1,1,1},
{1,1,1,1,1,0,1,0,1,0,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,1,1,1},
{1,1,1,1,1,1,0,1,0,1,0,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,0,1,1,0,1,0,1,1,1,1,1,1,0,1,1},
{1,1,1,1,1,1,1,0,1,1,1,0,0,0,1,0,1,1,1,1,1,1,1,0,0,1,0,0,1,1,0,1,1,1,1,1,1,1,1,0,1},
{1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,0,0,1,0,1,1,1,0,1,1,1,1,1,1,1,1,0}};
return connects[n1][n2];
}
/**
* Whether two nodes are adjacent.
*/
bool adj4(int n1, int n2) {
static int connects[51][51] = {
{0,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1},
{1,0,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1},
{1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,0,0,1,0,0,1,1,1,1,1,1,1,1,0,1,1,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1},
{1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,0,0,1,0,0,1,1,1,1,1,1,1,0,0,0,1,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,1},
{1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,1,0,1,0,0,1,1,1,1,1,1,1,0,0,0,1,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1},
{1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,1,0,1,0,0,1,1,1,1,1,1,1,0,0,0,1,0,1,1,1,1,1,0,1,0,1,1,1,1,1},
{1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,0,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,0,0,1,1,1,0,1,1,1,0,1,0,1,1,1,1},
{1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,0,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,0,0,0,1,1,0,1,1,1,0,1,0,1,1,1},
{1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,0,1,1,0,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,0,0,0,1,1,0,1,1,1,0,1,0,1,1},
{1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,0,0,0,1,1,1,0,1,0,0,1,1,1,0,1,1,1,0,1,0,1,1,1,0,1,1,1,0,1,0,1},
{1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,0,0,0,1,1,1,0,1,0,0,1,1,1,0,1,1,1,0,1,1,1,1,1,0,1,1,1,0,1,0},
{0,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,0,0,1,1,1,1,1,1,1,0,0,1,1,1,0,0,1,1,1,1,1,1,0,1},
{1,0,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,1,1,0,0,1,0,1,0,0,1,1,1,1,1,1,0},
{0,1,1,1,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,0,1,1,1,1},
{1,0,1,1,1,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,0,1,1,0,1,1,1,1,1,1,0,1,1,0,0,0,1,0,0,1,1,1},
{1,1,0,1,1,1,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,1},
{1,1,1,0,1,1,1,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,0,1,0,0,1},
{1,1,1,1,0,1,1,1,0,1,0,1,1,1,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,0,1,0,0},
{0,0,0,1,0,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,0,1},
{1,0,0,0,1,0,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,0,1,1,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,0},
{0,0,1,0,1,1,1,0,0,0,1,1,1,0,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1},
{1,0,0,1,0,1,1,1,0,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,0,1,0,0,1,1,1,1,1,1,1,1,1},
{1,1,0,0,1,0,1,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,0,0,1,0,0,1,1,1,1,1,1,1,1},
{1,1,1,0,0,1,0,1,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,1,0,0,1,1,1,1,1,1,1},
{1,1,1,1,0,0,1,0,1,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,0,1,0,0,1,1,1,1,1,1},
{1,1,1,1,1,0,0,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1},
{1,1,1,1,1,1,0,0,1,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,0,1,0,0,1,1,1,1},
{1,1,1,1,1,1,1,0,0,1,0,0,0,0,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,0,1,0,0,1,1,1},
{1,1,1,1,1,1,1,1,0,0,1,0,0,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,0,1,0,0,1,1},
{1,1,1,1,1,1,1,1,1,0,0,1,0,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,0,0,0,1,1,1,0,1,0,0,1},
{1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,0,1,1,1,0,0,0,1,1,1,0,1,0,0},
{0,1,0,0,1,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,0,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1},
{1,0,1,0,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,1,0,0,0},
{0,0,1,0,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,0,1,1,0,1,1,1,1,1,1,0,1,0,1,1,1,0,1,1,1,1},
{1,0,0,1,0,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,0,1,1,1,0,1,1,1},
{1,1,0,0,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,0,1,1,1,0,1,1},
{1,1,1,0,0,1,0,0,0,1,1,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,0,1,1,1,0,1},
{1,1,1,1,0,0,1,0,0,0,1,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,1,0,1,1,1,0},
{0,1,1,1,1,1,1,0,0,1,0,1,0,0,1,1,1,1,1,0,1,0,0,0,1,0,0,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,0,1},
{1,0,1,1,1,1,1,1,0,0,1,1,1,0,0,1,1,1,1,1,1,1,0,0,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,0},
{0,1,0,1,1,1,0,1,1,1,1,1,0,1,1,1,0,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1},
{1,0,1,0,1,1,1,0,1,1,1,0,1,0,1,1,1,0,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1},
{1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,1,0,1,1,1,0,0,1,1,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1},
{1,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,1,0,1,1,1,0,1,1,1,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1},
{1,1,1,1,0,1,0,1,1,1,0,1,1,1,0,0,0,1,1,1,1,1,1,1,0,0,1,0,1,1,1,0,1,1,1,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1},
{1,1,1,1,1,0,1,0,1,1,1,1,1,0,1,0,0,0,1,1,1,1,1,1,1,0,0,1,0,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1},
{1,1,1,1,1,1,0,1,0,1,1,1,1,0,0,1,0,0,0,1,1,1,1,1,1,1,0,0,1,0,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1},
{1,1,1,1,1,1,1,0,1,0,1,1,1,1,0,0,1,0,0,0,1,1,1,1,1,1,1,0,0,1,0,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1},
{1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,0,0,1,1,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1},
{1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1},
{1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0}};
return connects[n1][n2];
}
/**
* Whether two nodes are adjacent.
*/
bool adj5(int n1, int n2) {
static int connects[53][53] = {
{0,1,1,1,1,0,0,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,0,1,1,0,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,0,0,1,1,1,1},
{1,0,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,0,1,1,0,0,1,0,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1},
{1,1,0,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,0,1,1,0,1,1,0,1,0,1,0,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1},
{1,1,1,0,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,0,1,0,1,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,0,1,1,0,1},
{1,1,1,1,0,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,0,0,0,1,1,1,1,1,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,0,1,1,0},
{0,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,0},
{0,1,1,0,1,1,0,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1},
{1,0,1,1,0,1,1,0,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,0,0,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,0,1},
{1,1,0,1,1,1,1,1,0,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,0,1,1,0,0,1,0,1,1,1,0,0,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,0},
{0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,1,1,1,1,0,1,0,0,0,0,1,1,0,1,1,1,0,1,1,1,1,1,1},
{1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,1,1,0,1,1,1,0,1,1,1,1,1},
{1,1,0,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,0,1,1,1,1,0,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,0,1,1,1,0,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,0,0,1,0,1,1,1,1,0,1,0,0,0,0,1,1,1,1,0,1,1,1,1,1},
{1,1,1,1,0,1,1,1,0,1,1,1,1,0,1,1,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,1,1,1,0,1,1,1,1},
{1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,0,1,0,1,1,0,1,1,1,0,0,1,1,1,0,1,0,0,0,1,0,1,1,1,0,1,1,1},
{1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,0,1,1,1,0,0,1,1,1,1,0,1,1,1,0,1,0,0,1,1,0,1,0,1,0,1,1},
{1,1,1,1,1,0,1,1,0,0,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,0,1,1,0,1,0,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,0,1,0,1},
{1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,0,1,0,0,1,0,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,0,1,0},
{0,1,0,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,0,1,0,1,0,1,0,1,1,1},
{1,0,1,0,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,1,1,1,1,1,0,0,1,1,0,1,1},
{1,1,0,1,0,1,1,1,1,0,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,1,1,0,1},
{1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,0,1,1,0,1,1,1,0,0,1,1,0},
{0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,0,0,0,0,1,0,1,1,1,1,1,1,1,1,0,0,0,0},
{0,1,0,0,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,1,0,1,1,1,1,0,1},
{1,0,1,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,0,0,1,1,1,1,1,1,0},
{0,1,1,1,0,0,1,1,0,1,1,1,0,1,0,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,1,1,0,1,1},
{1,0,1,1,1,0,0,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,1,1,0,1},
{1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,0,1,0,1,1,1,0,1,1,0,0,1,1,1,0},
{0,1,1,1,1,1,1,0,0,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,0,1,0,1,1,1,1,0,0,1,0,1},
{1,0,1,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,0,0,1,0},
{0,0,0,0,1,1,1,1,1,1,1,1,0,1,0,0,0,0,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0},
{0,1,1,0,0,1,1,1,0,1,1,0,1,1,1,0,1,0,1,0,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1},
{1,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,0,1,1,1,1,0,1,0,1,1},
{1,1,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,0,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,0,1,0,1},
{1,1,1,0,1,0,1,0,1,0,1,1,1,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,0,1,0},
{0,1,0,1,1,1,1,0,0,1,0,1,1,1,0,1,1,1,1,0,1,0,0,1,0,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1},
{1,0,1,0,1,1,1,1,0,0,1,0,1,1,1,0,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,0,0,1,1,0,1,1,1,1,1},
{1,1,0,1,0,1,0,1,1,0,0,1,0,1,1,1,0,1,1,1,1,0,0,1,1,1,0,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1},
{1,1,1,0,1,1,1,0,1,0,0,0,1,0,1,1,1,0,0,1,1,1,0,1,1,0,1,0,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1},
{1,1,1,1,0,1,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,0,1,1,0,1,1,1,1,1,0,1,1,1,1,0,1,1,1,0,1,1,1,1},
{1,1,1,1,1,0,1,1,1,1,0,0,0,0,1,0,1,1,1,1,0,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,0,1,1,1,0,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,0,1,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,0,1,1,0,1,1},
{1,1,1,1,1,0,1,1,1,0,1,1,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1},
{1,1,1,1,1,1,0,1,1,1,0,1,1,0,0,0,0,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0},
{0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,0,1,1,1,1,1,0,1,1},
{1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,0,1,1,0,1,1,0,1},
{1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,0,1,1,0,1,1,0},
{0,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,0,0,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,0},
{0,1,1,0,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,0,0,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,0,1,1,1,1},
{1,0,1,1,0,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,1,0,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,0,1,1,1},
{1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,1,0,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,0,1,1},
{1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,0,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,0,1},
{1,1,1,1,0,0,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,0,1,1,0,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,0,0,1,1,1,1,0}};
return connects[n1][n2];
}
int main() {
cout << max_clique(9, adj1) << endl;
cout << max_clique(23, adj2) << endl;
cout << max_clique(41, adj3) << endl;
cout << max_clique(51, adj4) << endl;
cout << max_clique(53, adj5) << endl;
return 0;
}
I2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxpb3N0cmVhbT4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovKioKICogQ2hlY2tzIGlmIG5vZGUgaXMgYWRqIHRvIGFsbCBub2RlcyBpbiBzdWJncmFwaC4KICoKICogQHBhcmFtIG5vZGUgICAgICB0aGUgbm9kZSB0byBjaGVjayBmb3IgYWRqYWNlbmN5IGFsbCBvdGhlciBub2RlcyBpbiB0aGUgc3ViZ3JhcGgKICogQHBhcmFtIHN1YmdyYXBoICBhbiBhcnJheSBvZiBub2RlIGludGVnZXJzCiAqIEBwYXJhbSBsZW4gICAgICAgdGhlIGxlbmd0aCBvZiB0aGUgc3ViZ3JhcGggYXJyYXkKICogQHBhcmFtIGFkaiAgICAgICBhIGZ1bmN0aW9uIGFjY2VwdGluZyB0d28gaW50ZWdlcnMgY29ycmVzcG9uZGluZyB0byBub2RlcyBhbmQgcmV0dXJucyAKICogICAgICAgICAgICAgICAgICB3aGV0aGVyIHRoZXkgYXJlIGFkamFjZW50CiAqIEByZXR1cm5zICAgICAgICAgd2hldGhlciBub2RlIGlzIGFkamFjZW50IHRvIGFsbCBub2RlcyBpbiBzdWJncmFwaC4KICovIAppbmxpbmUgYm9vbCBhZGpfYWxsKGludCBub2RlLCBpbnQqIHN1YmdyYXBoLCBpbnQgbGVuLCBjb25zdCBmdW5jdGlvbjxib29sKGludCwgaW50KT4gJmFkail7Cglmb3IoaW50IGkgPSAwO2kgPCBsZW47aSsrKXsKCQkvL2NvdXQgPDwgIkNvbXBhcmluZyB3aXRoICIgPDwgbm9kZXNbY2hhaW5baV1dIDw8ICIuIiA8PCBlbmRsOwoJCWlmKGkgPT0gbm9kZSB8fCAhYWRqKHN1YmdyYXBoW2ldLCBub2RlKSkgewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJfQoJcmV0dXJuIHRydWU7Cn0KCi8qKgogKiBGaW5kcyB0aGUgc2l6ZSBvZiB0aGUgbWF4aW1hbCBjbGlxdWUgaW4gdGhlIGdyYXBoLgogKgogKiBAcGFyYW0gbnVtX25vZGVzICAgICB0aGUgbnVtYmVyIG9mIG5vZGVzCiAqIEBwYXJhbSBhZGogICAgICAgICAgIGEgZnVuY3Rpb24gYWNjZXB0aW5nIHR3byBpbnRlZ2VycyBjb3JyZXNwb25kaW5nIHRvIG5vZGVzIGFuZCByZXR1cm5zIAogKiAgICAgICAgICAgICAgICAgICAgICB3aGV0aGVyIHRoZXkgYXJlIGFkamFjZW50CiAqIEByZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBtYXhpbWFsIGNsaXF1ZS4KICovCmludCBtYXhfY2xpcXVlKGludCBudW1fbm9kZXMsIGNvbnN0IGZ1bmN0aW9uPGJvb2woaW50LCBpbnQpPiAmYWRqKQp7CglpZihudW1fbm9kZXMgPD0gMCkKCQlyZXR1cm4gMDsKCQoJLy8gSG9sZHMgaW5kaWNlcyBpbnRvIG5vZGVzIG9mIGN1cnJlbnQgY2xpcXVlLiBQZXJtdXRlZCB0byBjaGVjayBldmVyeSBzdWJncmFwaC4KCS8vIFRoZSBzdGFjayBpcyBrZXB0IGluIHNvcnRlZCBvcmRlciAoc29sZWx5IGJ5IG5hdHVyZSBvZiBob3cgaXQgaXMgaW5jcmVtZW50ZWQvcGVybXV0ZWQpIHNvCgkvLyBhcyB0byBvbmx5IGNoZWNrIGVhY2ggc3ViZ3JhcGggb25jZS4KCWludCBzdGFja1tudW1fbm9kZXMgKyAxXTsKCXN0YWNrWzBdID0gMDsKCQoJLy8gSG9sZHMgdGhlIGN1cnJlbnQgaW5kZXggaW4gdGhlIHN0YWNrIHRvIHBlcm11dGUuCglpbnQgaW5kZXggPSAwOwoJCgkvLyBIb2xkcyB0aGUgc2l6ZSBvZiB0aGUgbGFyZ2VzdCBjbGlxdWUgZm91bmQuCglpbnQgbWF4X2xlbiA9IDA7CgkKCXdoaWxlKGluZGV4ID49IDApIHsKCQlib29sIGNvbXBsZXRlID0gdHJ1ZTsKCQkKCQkvLyBEb3duIHRoZSB0cmVlLiBBZGQgbmV3IG5vZGVzIHRvIHRoZSBzdGFjayB3aGlsZSB3ZSBjYW4gZmluZCBhIG5laWdoYm9yIHRvIHRoZSAKCQkvLyB0b3Agbm9kZSBvbiB0aGUgc3RhY2sgdGhhdCBpcyBhbHNvIGFkamFjZW50IHRvIGFsbCBub2RlcyBpbiB0aGUgc3RhY2suCgkJd2hpbGUoY29tcGxldGUpIHsKCQkJCgkJCS8vIEZpbmQgYSBuZWlnaGJvci4KCQkJY29tcGxldGUgPSBmYWxzZTsgLy8gVGhpcyB3aWxsIHN0YXkgZmFsc2UgaWYgbm8gbmVpZ2hib3IgaXMgZm91bmQuCgkJCWZvcihpbnQgaSA9IHN0YWNrW2luZGV4XSArIDE7IWNvbXBsZXRlICYmIGkgPCBudW1fbm9kZXM7aSsrKSB7CgkJCQlpZihhZGpfYWxsKGksIHN0YWNrLCBpbmRleCArIDEsIGFkaikpIHsKCQkJCQlzdGFja1tpbmRleCArIDFdID0gaTsgLy8gQWRkIHRoaXMgbm9kZSB0byB0aGUgc3RhY2suCgkJCQkJaW5kZXgrKzsgLy8gQWR2YW5jZSB0aGUgc3RhY2sgcG9pbnRlci4KCQkJCQljb21wbGV0ZSA9IHRydWU7CgkJCQl9CgkJCX0KCgkJfQoJCWNvbXBsZXRlID0gZmFsc2U7CgkJCgkJaWYoaW5kZXggKyAxID4gbWF4X2xlbikgewoJCQltYXhfbGVuID0gaW5kZXggKyAxOwoJCX0KCQkKCQl3aGlsZSghY29tcGxldGUgJiYgaW5kZXggPj0gMCkgewoJCQlkbyB7CgkJCQkvLyBJZiB3ZSBnZXQgaGVyZSwgbm8gc3VpdGFibGUgbmVpZ2hib3IgY291bGQgYmUgZm91bmQgZm9yIHRoZSB0b3Agbm9kZSBvbiB0aGUgCgkJCQkvLyBzdGFjay4KCQkJCS8vIFNvIHdlIHdpbGwgcGVybXV0ZSB0aGUgbGFzdCBuZWlnaGJvciBvbiB0aGUgc3RhY2suCgkJCQlzdGFja1tpbmRleF0rKzsKCQkJCWNvbXBsZXRlID0gYWRqX2FsbChzdGFja1tpbmRleF0sIHN0YWNrLCBpbmRleCwgYWRqKTsKCQkJfSB3aGlsZSghY29tcGxldGUgJiYgc3RhY2tbaW5kZXhdIDwgbnVtX25vZGVzKTsKCQkJCgkJCWlmKHN0YWNrW2luZGV4XSA+PSBudW1fbm9kZXMpIHsKCQkJCS8vIElmIHdlIGdldCBoZXJlLCB3ZSd2ZSB0cmllZCBhbGwgcG9zc2liaWxpdGllcyBmb3IgdG9wIG5vZGUgb24gdGhlIHN0YWNrIGFuZCAKCQkJCS8vIG5vbmUgb2YgdGhlbSB3ZXJlIGNvbXBsZXRlIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN0YWNrLCBzbyB3ZSBuZWVkIHRvIHBvcCB0aGUgCgkJCQkvLyBub2RlIG9mZiB0aGUgc3RhY2sgYW5kIHN0YXJ0IHBlcm11dGluZyB0aGUgbm9kZSBiZWxvdyBpdC4KCQkJCWluZGV4LS07IC8vIFBvcCB0aGUgc3RhY2suCgkJCQkKCQkJCXN0YWNrW2luZGV4XSsrOwoJCQkJY29tcGxldGUgPSBhZGpfYWxsKHN0YWNrW2luZGV4XSwgc3RhY2ssIGluZGV4LCBhZGopOwoJCQl9CgkJfQoJfQoJCglyZXR1cm4gbWF4X2xlbjsKfQoKLyoqCiAqIFdoZXRoZXIgdHdvIG5vZGVzIGFyZSBhZGphY2VudC4KICovCmJvb2wgYWRqMShpbnQgbjEsIGludCBuMikgewogIHN0YXRpYyBpbnQgY29ubmVjdHNbOV1bOV0gPSB7CiAgezAsMSwxLDEsMCwwLDEsMSwxfSwKICB7MSwwLDEsMSwwLDAsMCwxLDF9LAogIHsxLDEsMCwxLDEsMSwwLDAsMX0sCiAgezEsMSwxLDAsMSwxLDEsMCwwfSwKICB7MCwwLDEsMSwwLDEsMSwwLDB9LAogIHswLDAsMSwxLDEsMCwxLDEsMX0sCiAgezEsMCwwLDEsMSwxLDAsMSwxfSwKICB7MSwxLDAsMCwwLDEsMSwwLDF9LAogIHsxLDEsMSwwLDAsMSwxLDEsMH19OwogIAogIHJldHVybiBjb25uZWN0c1tuMV1bbjJdOwp9CgovKioKICogV2hldGhlciB0d28gbm9kZXMgYXJlIGFkamFjZW50LgogKi8KYm9vbCBhZGoyKGludCBuMSwgaW50IG4yKSB7CiAgc3RhdGljIGludCBjb25uZWN0c1syM11bMjNdID0gewogIHswLDAsMSwwLDEsMCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwwLDEsMCwxLDB9LAogIHswLDAsMSwxLDEsMSwwLDAsMCwxLDEsMSwxLDEsMSwxLDEsMSwxLDAsMSwxLDF9LAogIHsxLDEsMCwwLDEsMSwxLDAsMCwwLDEsMSwxLDEsMSwxLDEsMSwxLDEsMCwxLDB9LAogIHswLDEsMCwwLDEsMSwwLDEsMSwxLDAsMCwwLDEsMSwxLDEsMSwxLDEsMSwwLDF9LAogIHsxLDEsMSwxLDAsMSwxLDAsMSwxLDEsMCwwLDAsMSwxLDEsMSwxLDEsMSwxLDB9LAogIHswLDEsMSwxLDEsMCwxLDEsMCwxLDEsMSwwLDEsMSwxLDAsMCwxLDEsMSwxLDF9LAogIHsxLDAsMSwwLDEsMSwwLDEsMSwwLDEsMSwxLDAsMSwxLDEsMCwxLDEsMSwxLDF9LAogIHsxLDAsMCwxLDAsMSwxLDAsMSwxLDAsMSwxLDEsMCwxLDEsMSwxLDEsMSwxLDF9LAogIHsxLDAsMCwxLDEsMCwxLDEsMCwxLDEsMCwxLDEsMSwwLDEsMSwxLDEsMSwxLDF9LAogIHsxLDEsMCwxLDEsMSwwLDEsMSwwLDEsMSwwLDEsMSwxLDAsMSwwLDEsMSwxLDF9LAogIHsxLDEsMSwwLDEsMSwxLDAsMSwxLDAsMSwxLDAsMSwxLDEsMCwwLDAsMSwxLDF9LAogIHsxLDEsMSwwLDAsMSwxLDEsMCwxLDEsMCwxLDEsMCwxLDEsMSwwLDAsMSwxLDF9LAogIHsxLDEsMSwwLDAsMCwxLDEsMSwwLDEsMSwwLDEsMSwwLDEsMSwxLDAsMSwxLDF9LAogIHsxLDEsMSwxLDAsMSwwLDEsMSwxLDAsMSwxLDAsMSwxLDAsMSwxLDEsMCwxLDF9LAogIHsxLDEsMSwxLDEsMSwxLDAsMSwxLDEsMCwxLDEsMCwxLDEsMCwxLDEsMCwwLDF9LAogIHsxLDEsMSwxLDEsMSwxLDEsMCwxLDEsMSwwLDEsMSwwLDEsMSwwLDEsMCwwLDF9LAogIHsxLDEsMSwxLDEsMCwxLDEsMSwwLDEsMSwxLDAsMSwxLDAsMSwxLDAsMSwwLDF9LAogIHsxLDEsMSwxLDEsMCwwLDEsMSwxLDAsMSwxLDEsMCwxLDEsMCwxLDEsMSwxLDB9LAogIHswLDEsMSwxLDEsMSwxLDEsMSwwLDAsMCwxLDEsMSwwLDEsMSwwLDEsMSwxLDF9LAogIHsxLDAsMSwxLDEsMSwxLDEsMSwxLDAsMCwwLDEsMSwxLDAsMSwxLDAsMCwxLDB9LAogIHswLDEsMCwxLDEsMSwxLDEsMSwxLDEsMSwxLDAsMCwwLDEsMSwxLDAsMCwxLDF9LAogIHsxLDEsMSwwLDEsMSwxLDEsMSwxLDEsMSwxLDEsMCwwLDAsMSwxLDEsMSwwLDB9LAogIHswLDEsMCwxLDAsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMCwxLDAsMSwwLDB9fTsKICAKICByZXR1cm4gY29ubmVjdHNbbjFdW24yXTsKfQoKLyoqCiAqIFdoZXRoZXIgdHdvIG5vZGVzIGFyZSBhZGphY2VudC4KICovCmJvb2wgYWRqMyhpbnQgbjEsIGludCBuMikgewogIHN0YXRpYyBpbnQgY29ubmVjdHNbNDFdWzQxXSA9IHsKICB7MCwxLDEsMSwxLDEsMSwxLDEsMCwxLDEsMSwwLDEsMCwwLDEsMSwxLDEsMSwxLDEsMSwwLDAsMSwwLDEsMSwxLDAsMSwxLDEsMSwxLDEsMSwxfSwKICB7MSwwLDEsMSwxLDEsMSwxLDEsMSwwLDEsMSwwLDAsMSwwLDAsMSwxLDEsMSwxLDEsMSwwLDEsMCwwLDAsMSwxLDEsMCwxLDEsMSwxLDEsMSwxfSwKICB7MSwxLDAsMSwxLDEsMSwxLDEsMCwxLDAsMSwxLDAsMSwwLDAsMCwxLDEsMSwxLDEsMSwwLDEsMSwxLDAsMCwxLDAsMSwwLDEsMSwxLDEsMSwxfSwKICB7MSwxLDEsMCwxLDEsMSwxLDEsMSwwLDEsMCwxLDEsMSwxLDAsMCwwLDEsMSwxLDEsMSwxLDAsMSwxLDEsMCwwLDEsMCwxLDAsMSwxLDEsMSwxfSwKICB7MSwxLDEsMSwwLDEsMSwxLDEsMCwxLDAsMSwxLDEsMCwxLDEsMCwwLDAsMSwxLDEsMSwxLDAsMCwxLDEsMSwwLDAsMSwwLDEsMCwxLDEsMSwxfSwKICB7MSwxLDEsMSwxLDAsMSwxLDEsMSwwLDEsMCwxLDEsMCwwLDEsMSwwLDAsMCwxLDEsMSwxLDAsMCwwLDEsMSwxLDEsMCwxLDAsMSwwLDEsMSwxfSwKICB7MSwxLDEsMSwxLDEsMCwxLDEsMSwxLDAsMSwxLDEsMSwxLDAsMSwxLDAsMCwwLDEsMSwxLDEsMCwxLDAsMSwxLDEsMSwwLDEsMCwxLDAsMSwxfSwKICB7MSwxLDEsMSwxLDEsMSwwLDEsMSwxLDEsMCwwLDEsMSwxLDEsMCwxLDEsMCwwLDAsMSwxLDEsMSwxLDEsMCwxLDEsMSwxLDAsMSwwLDEsMCwxfSwKICB7MSwxLDEsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDAsMSwxLDEsMSwwLDEsMSwwLDAsMCwxLDEsMSwwLDEsMSwwLDEsMSwxLDEsMCwxLDAsMSwwfSwKICB7MCwxLDAsMSwwLDEsMSwxLDEsMCwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMCwwLDEsMSwwLDEsMSwxLDEsMSwxLDAsMSwxLDEsMCwwLDEsMSwxfSwKICB7MSwwLDEsMCwxLDAsMSwxLDEsMSwwLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwwLDAsMSwxLDAsMSwxLDEsMSwxLDEsMCwxLDEsMSwwLDAsMSwxfSwKICB7MSwxLDAsMSwwLDEsMCwxLDEsMSwxLDAsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDAsMCwxLDAsMCwxLDEsMSwxLDEsMSwwLDEsMSwxLDAsMCwxfSwKICB7MSwxLDEsMCwxLDAsMSwwLDEsMSwxLDEsMCwxLDEsMSwwLDEsMCwxLDEsMSwxLDEsMCwwLDAsMCwxLDEsMSwxLDAsMSwxLDAsMSwxLDEsMCwwfSwKICB7MCwwLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwwLDEsMSwxLDEsMCwxLDAsMSwwLDEsMSwwLDEsMCwwLDAsMSwxLDEsMSwwLDAsMCwxLDEsMCwxfSwKICB7MSwwLDAsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDAsMSwxLDEsMSwwLDEsMCwxLDAsMSwwLDEsMSwwLDAsMCwxLDEsMSwxLDAsMCwwLDEsMSwwfSwKICB7MCwxLDEsMSwwLDAsMSwxLDEsMCwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwwLDEsMCwxLDAsMCwwLDEsMSwwLDEsMSwxLDEsMSwxLDAsMCwwfSwKICB7MCwwLDAsMSwxLDAsMSwxLDEsMSwwLDEsMCwxLDEsMSwwLDEsMSwxLDEsMSwxLDEsMSwwLDEsMSwwLDAsMSwxLDAsMSwxLDEsMSwxLDEsMSwxfSwKICB7MSwwLDAsMCwxLDEsMCwxLDEsMSwxLDAsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDEsMSwxLDAsMSwxLDAsMCwxLDAsMCwxLDEsMSwxLDEsMSwxfSwKICB7MSwxLDAsMCwwLDEsMSwwLDEsMSwxLDEsMCwwLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwwLDEsMCwxLDEsMCwwLDAsMCwwLDEsMSwxLDEsMSwxfSwKICB7MSwxLDEsMCwwLDAsMSwxLDAsMSwxLDEsMSwxLDAsMSwxLDEsMSwwLDEsMSwxLDEsMSwxLDAsMSwxLDEsMSwwLDEsMCwwLDAsMSwxLDEsMSwxfSwKICB7MSwxLDEsMSwwLDAsMCwxLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwwLDAsMCwxLDEsMSwxfSwKICB7MSwxLDEsMSwxLDAsMCwwLDEsMCwxLDEsMSwxLDAsMSwxLDEsMSwxLDEsMCwxLDEsMSwxLDAsMSwxLDEsMSwxLDAsMSwxLDAsMCwwLDEsMSwxfSwKICB7MSwxLDEsMSwxLDEsMCwwLDAsMCwwLDEsMSwwLDEsMCwxLDEsMSwxLDEsMSwwLDEsMSwxLDEsMCwwLDEsMSwxLDEsMCwxLDEsMCwwLDAsMSwxfSwKICB7MSwxLDEsMSwxLDEsMSwwLDAsMSwwLDAsMSwxLDAsMSwxLDEsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDAsMSwxLDEsMSwwLDEsMSwwLDAsMCwxfSwKICB7MSwxLDEsMSwxLDEsMSwxLDAsMSwxLDAsMCwxLDEsMCwxLDEsMSwxLDEsMSwxLDEsMCwxLDEsMSwwLDEsMCwxLDEsMSwxLDAsMSwxLDAsMCwwfSwKICB7MCwwLDAsMSwxLDEsMSwxLDEsMCwxLDEsMCwwLDAsMSwwLDEsMCwxLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwwLDEsMSwxLDAsMCwxLDEsMSwwfSwKICB7MCwxLDEsMCwwLDAsMSwxLDEsMSwwLDAsMCwxLDEsMCwxLDAsMSwwLDEsMCwxLDEsMSwxLDAsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDAsMCwxfSwKICB7MSwwLDEsMSwwLDAsMCwxLDEsMSwxLDAsMCwwLDEsMCwxLDEsMCwxLDAsMSwwLDEsMSwxLDEsMCwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMCwwfSwKICB7MCwwLDEsMSwxLDAsMSwxLDAsMSwxLDEsMSwwLDAsMCwwLDEsMSwxLDEsMSwwLDEsMCwxLDEsMSwwLDEsMSwxLDEsMCwxLDAsMSwwLDEsMSwxfSwKICB7MSwwLDAsMSwxLDEsMCwxLDEsMSwxLDEsMSwwLDAsMSwwLDAsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDAsMSwxLDEsMSwwLDEsMCwxLDAsMSwxfSwKICB7MSwxLDAsMCwxLDEsMSwwLDEsMSwxLDEsMSwxLDAsMSwxLDAsMCwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMCwxLDEsMSwxLDAsMSwwLDEsMCwxfSwKICB7MSwxLDEsMCwwLDEsMSwxLDAsMSwxLDEsMSwxLDEsMCwxLDEsMCwwLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwwLDEsMSwxLDEsMCwxLDAsMSwwfSwKICB7MCwxLDAsMSwwLDEsMSwxLDEsMCwxLDEsMCwxLDEsMSwwLDAsMCwxLDEsMCwxLDEsMSwxLDAsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDEsMSwxfSwKICB7MSwwLDEsMCwxLDAsMSwxLDEsMSwwLDEsMSwxLDEsMSwxLDAsMCwwLDEsMSwwLDEsMSwxLDEsMCwwLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwxfSwKICB7MSwxLDAsMSwwLDEsMCwxLDEsMSwxLDAsMSwwLDEsMSwxLDEsMCwwLDAsMSwxLDAsMSwxLDEsMSwxLDAsMSwxLDEsMSwwLDEsMSwxLDEsMSwxfSwKICB7MSwxLDEsMCwxLDAsMSwwLDEsMSwxLDEsMCwwLDAsMSwxLDEsMSwwLDAsMCwxLDEsMCwwLDEsMSwwLDEsMCwxLDEsMSwxLDAsMSwxLDEsMSwxfSwKICB7MSwxLDEsMSwwLDEsMCwxLDAsMCwxLDEsMSwwLDAsMSwxLDEsMSwxLDAsMCwwLDEsMSwwLDEsMSwxLDAsMSwwLDEsMSwxLDEsMCwxLDEsMSwxfSwKICB7MSwxLDEsMSwxLDAsMSwwLDEsMCwwLDEsMSwxLDAsMSwxLDEsMSwxLDEsMCwwLDAsMSwxLDEsMSwwLDEsMCwxLDEsMSwxLDEsMSwwLDEsMSwxfSwKICB7MSwxLDEsMSwxLDEsMCwxLDAsMSwwLDAsMSwxLDEsMCwxLDEsMSwxLDEsMSwwLDAsMCwxLDAsMSwxLDAsMSwwLDEsMSwxLDEsMSwxLDAsMSwxfSwKICB7MSwxLDEsMSwxLDEsMSwwLDEsMSwxLDAsMCwwLDEsMCwxLDEsMSwxLDEsMSwxLDAsMCwxLDAsMCwxLDEsMCwxLDEsMSwxLDEsMSwxLDEsMCwxfSwKICB7MSwxLDEsMSwxLDEsMSwxLDAsMSwxLDEsMCwxLDAsMCwxLDEsMSwxLDEsMSwxLDEsMCwwLDEsMCwxLDEsMSwwLDEsMSwxLDEsMSwxLDEsMSwwfX07CiAgCiAgcmV0dXJuIGNvbm5lY3RzW24xXVtuMl07Cn0KCi8qKgogKiBXaGV0aGVyIHR3byBub2RlcyBhcmUgYWRqYWNlbnQuCiAqLwpib29sIGFkajQoaW50IG4xLCBpbnQgbjIpIHsKICBzdGF0aWMgaW50IGNvbm5lY3RzWzUxXVs1MV0gPSB7CiAgezAsMSwxLDEsMSwxLDEsMSwxLDEsMSwwLDEsMCwxLDEsMSwxLDAsMSwwLDEsMSwxLDEsMSwxLDEsMSwxLDEsMCwxLDAsMSwxLDEsMSwwLDEsMCwxLDEsMSwxLDEsMSwxLDEsMSwxfSwKICB7MSwwLDEsMSwxLDEsMSwxLDEsMSwxLDEsMCwxLDAsMSwxLDEsMCwwLDAsMCwxLDEsMSwxLDEsMSwxLDEsMSwxLDAsMCwwLDEsMSwxLDEsMCwxLDAsMSwxLDEsMSwxLDEsMSwxLDF9LAogIHsxLDEsMCwxLDEsMSwxLDEsMSwxLDEsMCwxLDEsMSwwLDEsMSwwLDAsMSwwLDAsMSwxLDEsMSwxLDEsMSwxLDAsMSwxLDAsMCwxLDEsMSwxLDAsMSwwLDEsMSwxLDEsMSwxLDEsMX0sCiAgezEsMSwxLDAsMSwxLDEsMSwxLDEsMSwxLDAsMSwxLDEsMCwxLDEsMCwwLDEsMCwwLDEsMSwxLDEsMSwxLDEsMCwwLDAsMSwwLDAsMSwxLDEsMSwwLDEsMCwxLDEsMSwxLDEsMSwxfSwKICB7MSwxLDEsMSwwLDEsMSwxLDEsMSwxLDEsMSwwLDEsMSwxLDAsMCwxLDEsMCwxLDAsMCwxLDEsMSwxLDEsMSwxLDAsMCwwLDEsMCwwLDEsMSwxLDEsMCwxLDAsMSwxLDEsMSwxLDF9LAogIHsxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwxLDEsMCwxLDEsMSwwLDAsMSwxLDAsMSwwLDAsMSwxLDEsMSwxLDEsMSwwLDAsMCwxLDAsMSwxLDEsMSwxLDAsMSwwLDEsMSwxLDEsMX0sCiAgezEsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDEsMCwxLDAsMSwxLDEsMCwxLDEsMSwwLDEsMCwwLDEsMSwxLDEsMSwxLDEsMCwwLDAsMSwxLDEsMCwxLDEsMSwwLDEsMCwxLDEsMSwxfSwKICB7MSwxLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwxLDAsMSwwLDEsMSwxLDAsMSwxLDEsMCwxLDAsMCwxLDEsMSwxLDEsMSwxLDAsMCwwLDAsMSwxLDAsMSwxLDEsMCwxLDAsMSwxLDF9LAogIHsxLDEsMSwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwwLDEsMCwxLDEsMCwwLDEsMSwxLDAsMSwwLDAsMSwxLDEsMSwxLDEsMSwwLDAsMCwwLDEsMSwwLDEsMSwxLDAsMSwwLDEsMX0sCiAgezEsMSwxLDEsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDEsMCwxLDEsMSwwLDAsMCwxLDEsMSwwLDEsMCwwLDEsMSwxLDAsMSwxLDEsMCwxLDAsMSwxLDEsMCwxLDEsMSwwLDEsMCwxfSwKICB7MSwxLDEsMSwxLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwxLDAsMSwxLDEsMCwwLDAsMSwxLDEsMCwxLDAsMCwxLDEsMSwwLDEsMSwxLDAsMSwxLDEsMSwxLDAsMSwxLDEsMCwxLDB9LAogIHswLDEsMCwxLDEsMSwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMCwwLDEsMCwwLDAsMSwxLDEsMSwxLDEsMSwwLDAsMSwxLDEsMCwwLDEsMSwxLDEsMSwxLDAsMX0sCiAgezEsMCwxLDAsMSwxLDEsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDAsMCwxLDAsMCwwLDEsMCwxLDEsMSwxLDEsMCwwLDEsMCwxLDAsMCwxLDEsMSwxLDEsMSwwfSwKICB7MCwxLDEsMSwwLDEsMCwxLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwwLDAsMSwxLDEsMSwxLDEsMCwwLDEsMCwwLDEsMSwxLDEsMSwxLDAsMCwxLDAsMCwwLDEsMCwwLDEsMSwxLDF9LAogIHsxLDAsMSwxLDEsMCwxLDAsMSwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwxLDAsMCwxLDEsMCwxLDEsMSwxLDEsMSwwLDEsMSwwLDAsMCwxLDAsMCwxLDEsMX0sCiAgezEsMSwwLDEsMSwxLDAsMSwwLDEsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwwLDAsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMCwwLDAsMSwwLDAsMSwxfSwKICB7MSwxLDEsMCwxLDEsMSwwLDEsMCwxLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwxLDEsMSwwLDEsMSwxLDAsMCwwLDEsMCwwLDF9LAogIHsxLDEsMSwxLDAsMSwxLDEsMCwxLDAsMSwxLDEsMSwxLDEsMCwxLDEsMCwxLDEsMSwwLDEsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDEsMSwxLDEsMCwxLDEsMSwwLDAsMCwxLDAsMH0sCiAgezAsMCwwLDEsMCwwLDEsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDEsMSwwLDEsMCwxLDEsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDEsMSwxLDEsMCwwLDEsMCwxfSwKICB7MSwwLDAsMCwxLDAsMCwxLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwxLDEsMCwxLDAsMSwxLDEsMCwxLDEsMSwwLDAsMSwxLDEsMSwxLDEsMSwxLDAsMCwxLDB9LAogIHswLDAsMSwwLDEsMSwxLDAsMCwwLDEsMSwxLDAsMSwxLDEsMCwxLDEsMCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDAsMCwxLDAsMSwxLDAsMSwxLDEsMSwxLDEsMSwxLDEsMX0sCiAgezEsMCwwLDEsMCwxLDEsMSwwLDAsMCwxLDEsMSwwLDEsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDEsMSwxLDEsMCwxLDEsMSwwLDAsMSwwLDEsMCwwLDEsMSwxLDEsMSwxLDEsMSwxfSwKICB7MSwxLDAsMCwxLDAsMSwxLDEsMCwwLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwxLDEsMSwxLDAsMSwxLDEsMCwwLDAsMCwxLDAsMCwxLDEsMSwxLDEsMSwxLDF9LAogIHsxLDEsMSwwLDAsMSwwLDEsMSwxLDAsMCwxLDEsMSwxLDAsMSwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDAsMCwwLDAsMSwwLDAsMSwxLDEsMSwxLDEsMX0sCiAgezEsMSwxLDEsMCwwLDEsMCwxLDEsMSwwLDAsMSwxLDEsMSwwLDEsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwxLDAsMSwwLDEsMCwwLDEsMSwxLDEsMSwxfSwKICB7MSwxLDEsMSwxLDAsMCwxLDAsMSwxLDEsMCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDAsMSwxLDEsMCwxLDAsMCwxLDEsMSwxLDF9LAogIHsxLDEsMSwxLDEsMSwwLDAsMSwwLDEsMCwxLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwwLDEsMSwxLDEsMCwwLDEsMSwxLDAsMSwwLDAsMSwxLDEsMX0sCiAgezEsMSwxLDEsMSwxLDEsMCwwLDEsMCwwLDAsMCwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDEsMCwxLDEsMSwxLDAsMCwxLDEsMSwwLDEsMCwwLDEsMSwxfSwKICB7MSwxLDEsMSwxLDEsMSwxLDAsMCwxLDAsMCwwLDAsMSwxLDEsMCwxLDEsMSwxLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwxLDAsMSwxLDEsMSwwLDAsMSwxLDEsMCwxLDAsMCwxLDF9LAogIHsxLDEsMSwxLDEsMSwxLDEsMSwwLDAsMSwwLDEsMCwwLDEsMSwxLDAsMSwxLDEsMSwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwwLDEsMSwxLDAsMCwwLDEsMSwxLDAsMSwwLDAsMX0sCiAgezEsMSwxLDEsMSwxLDEsMSwxLDEsMCwxLDEsMCwxLDAsMCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDAsMSwxLDAsMSwxLDEsMCwxLDEsMSwwLDAsMCwxLDEsMSwwLDEsMCwwfSwKICB7MCwxLDAsMCwxLDEsMSwxLDEsMSwxLDEsMCwwLDEsMSwxLDAsMSwxLDEsMCwxLDAsMSwxLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwxLDAsMCwxLDAsMCwwLDF9LAogIHsxLDAsMSwwLDAsMSwxLDEsMSwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwxLDAsMSwwLDEsMSwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwwLDAsMSwwLDAsMH0sCiAgezAsMCwxLDAsMCwwLDEsMSwxLDAsMSwxLDEsMSwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwwLDEsMSwxLDAsMSwxLDAsMSwxLDEsMSwxLDEsMCwxLDAsMSwxLDEsMCwxLDEsMSwxfSwKICB7MSwwLDAsMSwwLDAsMCwxLDEsMSwwLDEsMSwxLDEsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwxLDAsMSwwLDEsMSwxLDAsMSwxLDF9LAogIHsxLDEsMCwwLDEsMCwwLDAsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMCwwLDEsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwwLDEsMCwxLDEsMSwwLDEsMX0sCiAgezEsMSwxLDAsMCwxLDAsMCwwLDEsMSwwLDEsMSwxLDEsMSwxLDAsMSwxLDAsMCwxLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDEsMCwxLDAsMSwxLDEsMCwxfSwKICB7MSwxLDEsMSwwLDAsMSwwLDAsMCwxLDAsMCwxLDEsMSwxLDEsMSwwLDAsMSwwLDAsMSwxLDEsMSwxLDEsMCwwLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwxLDAsMSwwLDEsMSwxLDB9LAogIHswLDEsMSwxLDEsMSwxLDAsMCwxLDAsMSwwLDAsMSwxLDEsMSwxLDAsMSwwLDAsMCwxLDAsMCwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwxLDEsMCwxLDAsMX0sCiAgezEsMCwxLDEsMSwxLDEsMSwwLDAsMSwxLDEsMCwwLDEsMSwxLDEsMSwxLDEsMCwwLDAsMSwwLDAsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDEsMSwxLDAsMSwwfSwKICB7MCwxLDAsMSwxLDEsMCwxLDEsMSwxLDEsMCwxLDEsMSwwLDEsMSwxLDAsMCwxLDAsMSwxLDEsMCwwLDAsMSwxLDEsMCwxLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwxLDEsMSwxLDF9LAogIHsxLDAsMSwwLDEsMSwxLDAsMSwxLDEsMCwxLDAsMSwxLDEsMCwxLDEsMSwwLDAsMSwwLDEsMSwxLDAsMCwwLDEsMSwxLDAsMSwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwxLDEsMX0sCiAgezEsMSwwLDEsMCwxLDEsMSwwLDEsMSwwLDAsMCwwLDEsMSwxLDEsMSwxLDEsMCwwLDEsMCwxLDEsMSwwLDAsMSwxLDAsMSwwLDEsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDEsMSwxfSwKICB7MSwxLDEsMCwxLDAsMSwxLDEsMCwxLDEsMCwwLDAsMCwxLDEsMSwxLDEsMSwxLDAsMCwxLDAsMSwxLDEsMCwxLDEsMSwwLDEsMCwxLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwxLDF9LAogIHsxLDEsMSwxLDAsMSwwLDEsMSwxLDAsMSwxLDEsMCwwLDAsMSwxLDEsMSwxLDEsMSwwLDAsMSwwLDEsMSwxLDAsMSwxLDEsMCwxLDAsMSwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMX0sCiAgezEsMSwxLDEsMSwwLDEsMCwxLDEsMSwxLDEsMCwxLDAsMCwwLDEsMSwxLDEsMSwxLDEsMCwwLDEsMCwxLDEsMCwwLDEsMSwxLDAsMSwxLDEsMSwxLDEsMSwxLDAsMSwxLDEsMSwxfSwKICB7MSwxLDEsMSwxLDEsMCwxLDAsMSwxLDEsMSwwLDAsMSwwLDAsMCwxLDEsMSwxLDEsMSwxLDAsMCwxLDAsMSwxLDAsMCwxLDEsMSwwLDEsMSwxLDEsMSwxLDEsMSwwLDEsMSwxLDF9LAogIHsxLDEsMSwxLDEsMSwxLDAsMSwwLDEsMSwxLDEsMCwwLDEsMCwwLDAsMSwxLDEsMSwxLDEsMSwwLDAsMSwwLDAsMSwxLDAsMSwxLDEsMCwxLDEsMSwxLDEsMSwxLDEsMCwxLDEsMX0sCiAgezEsMSwxLDEsMSwxLDEsMSwwLDEsMCwxLDEsMSwxLDAsMCwxLDEsMCwxLDEsMSwxLDEsMSwxLDEsMCwwLDEsMCwwLDEsMSwwLDEsMSwxLDAsMSwxLDEsMSwxLDEsMSwxLDAsMSwxfSwKICB7MSwxLDEsMSwxLDEsMSwxLDEsMCwxLDAsMSwxLDEsMSwwLDAsMCwxLDEsMSwxLDEsMSwxLDEsMSwxLDAsMCwwLDAsMSwxLDEsMCwxLDAsMSwxLDEsMSwxLDEsMSwxLDEsMSwwLDF9LAogIHsxLDEsMSwxLDEsMSwxLDEsMSwxLDAsMSwwLDEsMSwxLDEsMCwxLDAsMSwxLDEsMSwxLDEsMSwxLDEsMSwwLDEsMCwxLDEsMSwxLDAsMSwwLDEsMSwxLDEsMSwxLDEsMSwxLDEsMH19OwoKICAKICByZXR1cm4gY29ubmVjdHNbbjFdW24yXTsKfQoKLyoqCiAqIFdoZXRoZXIgdHdvIG5vZGVzIGFyZSBhZGphY2VudC4KICovCmJvb2wgYWRqNShpbnQgbjEsIGludCBuMikgewogIHN0YXRpYyBpbnQgY29ubmVjdHNbNTNdWzUzXSA9IHsKICB7MCwxLDEsMSwxLDAsMCwxLDEsMCwxLDEsMSwxLDEsMSwxLDEsMCwxLDEsMSwwLDAsMSwwLDEsMSwwLDEsMCwwLDEsMSwxLDAsMSwxLDEsMSwxLDEsMSwxLDAsMSwxLDAsMCwxLDEsMSwxfSwKICB7MSwwLDEsMSwxLDEsMSwwLDEsMSwwLDEsMSwxLDEsMSwxLDEsMSwwLDEsMSwxLDEsMCwxLDAsMSwxLDAsMCwxLDAsMSwxLDEsMCwxLDEsMSwxLDEsMSwxLDEsMCwxLDEsMSwwLDEsMSwxfSwKICB7MSwxLDAsMSwxLDEsMSwxLDAsMSwxLDAsMSwxLDEsMSwxLDEsMCwxLDAsMSwxLDAsMSwxLDEsMCwxLDEsMCwxLDEsMCwxLDAsMSwwLDEsMSwxLDEsMSwxLDEsMSwwLDEsMSwxLDAsMSwxfSwKICB7MSwxLDEsMCwxLDEsMCwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwwLDEsMCwxLDAsMCwxLDEsMSwxLDEsMCwwLDEsMSwwLDEsMCwxLDAsMSwxLDEsMSwxLDEsMSwxLDEsMCwxLDEsMCwxfSwKICB7MSwxLDEsMSwwLDEsMSwwLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwxLDAsMSwxLDAsMCwwLDEsMSwxLDEsMSwwLDAsMSwxLDEsMSwwLDEsMCwxLDEsMSwxLDEsMSwxLDEsMSwwLDEsMSwwfSwKICB7MCwxLDEsMSwxLDAsMSwxLDEsMSwxLDAsMSwxLDEsMSwwLDEsMSwxLDEsMSwxLDEsMSwwLDAsMSwxLDEsMSwxLDAsMCwwLDEsMSwxLDEsMSwwLDEsMCwxLDEsMSwxLDEsMSwxLDEsMSwwfSwKICB7MCwxLDEsMCwxLDEsMCwxLDEsMSwxLDAsMSwxLDAsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDAsMCwxLDAsMSwxLDEsMCwxLDEsMSwwLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwxLDAsMSwxfSwKICB7MSwwLDEsMSwwLDEsMSwwLDEsMSwxLDEsMCwxLDEsMCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMCwwLDEsMSwxLDEsMSwwLDAsMSwxLDAsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDEsMCwxfSwKICB7MSwxLDAsMSwxLDEsMSwxLDAsMSwxLDEsMSwwLDEsMSwwLDEsMSwxLDEsMSwxLDEsMSwwLDEsMSwwLDAsMSwwLDEsMSwxLDAsMCwxLDEsMCwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwwfSwKICB7MCwxLDEsMSwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwwLDEsMSwxLDAsMSwxLDEsMCwxLDEsMSwxLDAsMSwxLDEsMSwwLDEsMCwwLDAsMCwxLDEsMCwxLDEsMSwwLDEsMSwxLDEsMSwxfSwKICB7MSwwLDEsMSwxLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwxLDAsMSwxLDEsMCwxLDAsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDAsMSwwLDAsMCwwLDEsMSwwLDEsMSwxLDAsMSwxLDEsMSwxfSwKICB7MSwxLDAsMSwxLDAsMCwxLDEsMSwxLDAsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMCwxLDEsMSwwLDEsMSwwLDEsMSwxLDEsMCwxLDAsMCwwLDAsMSwxLDEsMSwxLDEsMSwxLDEsMSwxfSwKICB7MSwxLDEsMCwxLDEsMSwwLDEsMSwxLDEsMCwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwwLDEsMSwxLDAsMCwxLDAsMSwxLDEsMSwwLDEsMCwwLDAsMCwxLDEsMSwxLDAsMSwxLDEsMSwxfSwKICB7MSwxLDEsMSwwLDEsMSwxLDAsMSwxLDEsMSwwLDEsMSwxLDEsMSwwLDEsMSwwLDEsMSwxLDAsMSwxLDEsMSwxLDEsMCwxLDEsMSwxLDAsMSwwLDAsMCwwLDAsMSwxLDEsMCwxLDEsMSwxfSwKICB7MSwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDAsMSwxLDEsMSwwLDEsMCwxLDEsMCwxLDEsMSwwLDAsMSwxLDEsMCwxLDAsMCwwLDEsMCwxLDEsMSwwLDEsMSwxfSwKICB7MSwxLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwxLDEsMCwxLDEsMCwxLDEsMCwxLDEsMSwxLDAsMSwxLDEsMCwwLDEsMSwxLDEsMCwxLDEsMSwwLDEsMCwwLDEsMSwwLDEsMCwxLDAsMSwxfSwKICB7MSwxLDEsMSwxLDAsMSwxLDAsMCwxLDEsMSwxLDEsMSwwLDEsMSwwLDEsMSwxLDEsMSwxLDEsMCwxLDEsMCwxLDAsMSwxLDEsMSwwLDEsMSwxLDAsMSwwLDAsMSwxLDEsMSwwLDEsMCwxfSwKICB7MSwxLDEsMSwxLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwxLDAsMSwxLDAsMSwxLDEsMSwxLDEsMSwwLDEsMCwwLDEsMCwxLDEsMSwxLDAsMSwxLDEsMCwxLDAsMCwxLDEsMSwxLDAsMSwwfSwKICB7MCwxLDAsMSwxLDEsMSwxLDEsMSwxLDEsMCwxLDEsMCwxLDEsMCwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwxLDEsMCwwLDEsMSwxLDAsMSwxLDEsMSwwLDEsMCwxLDAsMSwwLDEsMSwxfSwKICB7MSwwLDEsMCwxLDEsMSwxLDEsMSwxLDEsMSwwLDEsMSwwLDEsMSwwLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwwLDEsMSwwLDAsMSwxLDEsMCwxLDEsMSwxLDEsMSwwLDAsMSwxLDAsMSwxfSwKICB7MSwxLDAsMSwwLDEsMSwxLDEsMCwxLDEsMSwxLDAsMSwxLDAsMSwxLDAsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDAsMSwxLDEsMCwxLDEsMSwwLDEsMSwxLDEsMSwxLDAsMCwxLDEsMCwxfSwKICB7MSwxLDEsMCwxLDEsMSwxLDEsMSwwLDEsMSwxLDEsMCwxLDEsMSwxLDEsMCwxLDEsMSwwLDEsMSwxLDEsMSwxLDEsMCwxLDAsMSwwLDEsMSwxLDAsMSwxLDAsMSwxLDEsMCwwLDEsMSwwfSwKICB7MCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwxLDEsMCwxLDEsMSwxLDAsMCwwLDAsMSwwLDEsMSwxLDEsMSwxLDEsMSwwLDAsMCwwfSwKICB7MCwxLDAsMCwwLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDEsMSwxLDEsMSwwLDEsMSwwLDAsMSwwLDEsMSwxLDEsMCwxfSwKICB7MSwwLDEsMCwwLDEsMSwxLDEsMCwxLDAsMSwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDAsMSwxLDAsMCwxLDEsMSwxLDEsMSwwfSwKICB7MCwxLDEsMSwwLDAsMSwxLDAsMSwxLDEsMCwxLDAsMSwxLDEsMSwxLDEsMCwxLDEsMSwwLDEsMSwxLDEsMSwxLDEsMSwxLDEsMCwxLDAsMSwxLDEsMSwxLDEsMCwwLDEsMSwxLDAsMSwxfSwKICB7MSwwLDEsMSwxLDAsMCwxLDEsMSwxLDEsMSwwLDEsMCwxLDEsMSwxLDEsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDEsMSwxLDEsMSwwLDEsMCwxLDEsMSwxLDEsMSwwLDAsMSwxLDEsMCwxfSwKICB7MSwxLDAsMSwxLDEsMCwwLDEsMSwxLDEsMSwxLDAsMSwwLDEsMSwxLDEsMSwxLDEsMSwxLDEsMCwxLDEsMSwwLDEsMSwxLDEsMSwxLDAsMSwwLDEsMSwxLDAsMSwxLDAsMCwxLDEsMSwwfSwKICB7MCwxLDEsMSwxLDEsMSwwLDAsMSwxLDAsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwxLDAsMSwwLDEsMSwxLDEsMCwwLDEsMCwxfSwKICB7MSwwLDEsMSwxLDEsMCwxLDAsMCwxLDEsMCwxLDEsMSwxLDEsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMCwwLDAsMSwwfSwKICB7MCwwLDAsMCwxLDEsMSwxLDEsMSwxLDEsMCwxLDAsMCwwLDAsMSwxLDEsMSwwLDEsMSwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwwfSwKICB7MCwxLDEsMCwwLDEsMSwxLDAsMSwxLDAsMSwxLDEsMCwxLDAsMSwwLDEsMSwxLDEsMSwxLDEsMCwxLDEsMSwwLDEsMSwxLDEsMSwwLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwwLDEsMSwxfSwKICB7MSwwLDEsMSwwLDAsMSwxLDEsMSwxLDEsMCwxLDEsMSwwLDEsMSwxLDAsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDAsMSwxLDAsMSwxLDAsMSwxLDEsMSwwLDEsMSwxLDEsMCwxLDAsMSwxfSwKICB7MSwxLDAsMSwxLDAsMCwxLDEsMSwxLDEsMSwwLDEsMSwxLDAsMCwxLDEsMCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMCwxLDEsMCwxLDEsMCwxLDEsMSwxLDEsMSwxLDEsMSwwLDEsMCwxfSwKICB7MSwxLDEsMCwxLDAsMSwwLDEsMCwxLDEsMSwxLDAsMSwxLDEsMCwwLDEsMSwxLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwwLDEsMSwwLDEsMSwwLDEsMSwxLDEsMSwxLDEsMSwxLDAsMSwwfSwKICB7MCwxLDAsMSwxLDEsMSwwLDAsMSwwLDEsMSwxLDAsMSwxLDEsMSwwLDEsMCwwLDEsMCwxLDEsMSwxLDEsMSwxLDAsMSwxLDAsMSwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwxLDEsMSwxfSwKICB7MSwwLDEsMCwxLDEsMSwxLDAsMCwxLDAsMSwxLDEsMCwxLDEsMSwxLDAsMSwwLDEsMSwwLDEsMSwxLDEsMSwxLDEsMCwxLDEsMCwxLDEsMSwxLDEsMSwwLDAsMSwxLDAsMSwxLDEsMSwxfSwKICB7MSwxLDAsMSwwLDEsMCwxLDEsMCwwLDEsMCwxLDEsMSwwLDEsMSwxLDEsMCwwLDEsMSwxLDAsMSwxLDEsMSwwLDEsMSwwLDEsMSwwLDEsMSwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwxfSwKICB7MSwxLDEsMCwxLDEsMSwwLDEsMCwwLDAsMSwwLDEsMSwxLDAsMCwxLDEsMSwwLDEsMSwwLDEsMCwxLDEsMSwxLDAsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwxfSwKICB7MSwxLDEsMSwwLDEsMSwxLDAsMCwwLDAsMCwxLDAsMSwxLDEsMSwwLDEsMSwxLDEsMSwxLDAsMSwxLDEsMCwxLDEsMCwxLDEsMSwxLDEsMCwxLDEsMSwxLDAsMSwxLDEsMCwxLDEsMSwxfSwKICB7MSwxLDEsMSwxLDAsMSwxLDEsMSwwLDAsMCwwLDEsMCwxLDEsMSwxLDAsMSwwLDAsMSwxLDEsMCwxLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwwLDEsMSwxLDEsMCwxLDEsMSwwLDEsMSwxfSwKICB7MSwxLDEsMSwxLDEsMSwxLDEsMSwxLDAsMCwwLDAsMSwwLDEsMSwxLDEsMCwxLDEsMCwxLDEsMSwwLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDAsMSwxLDEsMSwwLDAsMSwxLDAsMSwxfSwKICB7MSwxLDEsMSwxLDAsMSwxLDEsMCwxLDEsMCwwLDAsMCwxLDAsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDAsMSwwLDEsMSwxLDAsMSwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwxLDEsMCwxfSwKICB7MSwxLDEsMSwxLDEsMCwxLDEsMSwwLDEsMSwwLDAsMCwwLDEsMCwxLDEsMSwxLDAsMSwxLDEsMSwwLDEsMSwxLDAsMSwxLDEsMCwxLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwxLDEsMSwwfSwKICB7MCwxLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwwLDEsMSwwLDAsMSwxLDEsMCwxLDAsMCwxLDEsMCwxLDEsMSwxLDEsMSwxLDEsMCwxLDEsMCwxLDEsMSwxLDAsMSwxLDEsMSwxLDAsMSwxfSwKICB7MSwwLDEsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDAsMSwxLDAsMCwxLDEsMSwxLDEsMCwwLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwwLDEsMSwwLDEsMSwxLDEsMCwxLDEsMCwxLDEsMCwxfSwKICB7MSwxLDAsMSwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMCwxLDEsMSwwLDEsMSwxLDAsMSwwLDAsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDAsMSwxLDAsMSwxLDEsMSwwLDEsMSwwLDEsMSwwfSwKICB7MCwxLDEsMSwxLDEsMSwxLDEsMSwwLDEsMCwxLDEsMSwxLDEsMCwwLDAsMSwxLDEsMSwxLDAsMCwxLDEsMSwxLDEsMSwxLDEsMCwxLDEsMSwxLDAsMSwxLDEsMSwxLDAsMSwxLDEsMSwwfSwKICB7MCwxLDEsMCwxLDEsMSwxLDEsMSwxLDEsMSwwLDEsMCwxLDEsMSwxLDAsMCwxLDEsMSwxLDEsMCwwLDAsMSwxLDAsMSwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMCwxLDEsMCwxLDEsMSwxfSwKICB7MSwwLDEsMSwwLDEsMSwxLDEsMSwxLDEsMSwxLDAsMSwwLDEsMCwxLDEsMCwwLDEsMSwxLDEsMSwwLDAsMSwwLDEsMCwxLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwwLDEsMSwwLDEsMSwxfSwKICB7MSwxLDAsMSwxLDEsMCwxLDEsMSwxLDEsMSwxLDEsMCwxLDAsMSwwLDEsMSwwLDEsMSwwLDEsMSwxLDAsMSwxLDAsMSwwLDEsMSwxLDEsMSwxLDAsMSwxLDAsMSwxLDEsMSwxLDAsMSwxfSwKICB7MSwxLDEsMCwxLDEsMSwwLDEsMSwxLDEsMSwxLDEsMSwwLDEsMSwxLDAsMSwwLDAsMSwxLDAsMSwwLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwxLDEsMCwxLDEsMCwxLDEsMSwxLDEsMCwxfSwKICB7MSwxLDEsMSwwLDAsMSwxLDAsMSwxLDEsMSwxLDEsMSwxLDAsMSwxLDEsMCwwLDEsMCwxLDEsMCwxLDAsMCwxLDEsMSwwLDEsMSwxLDEsMSwxLDEsMSwwLDEsMSwwLDAsMSwxLDEsMSwwfX07CgogIAogIHJldHVybiBjb25uZWN0c1tuMV1bbjJdOwp9CgppbnQgbWFpbigpIHsKICBjb3V0IDw8IG1heF9jbGlxdWUoOSwgYWRqMSkgPDwgZW5kbDsKICBjb3V0IDw8IG1heF9jbGlxdWUoMjMsIGFkajIpIDw8IGVuZGw7CiAgY291dCA8PCBtYXhfY2xpcXVlKDQxLCBhZGozKSA8PCBlbmRsOwogIGNvdXQgPDwgbWF4X2NsaXF1ZSg1MSwgYWRqNCkgPDwgZW5kbDsKICBjb3V0IDw8IG1heF9jbGlxdWUoNTMsIGFkajUpIDw8IGVuZGw7CiAgcmV0dXJuIDA7Cn0=