#include <string>
#include <iostream>
#include <vector>
using namespace std;
int main( )
{
vector< string> v = { "a" ,"b" ,"c" ,"d" ,"e" ,"f" ,"g" ,"h" ,"i" ,"j" ,"k" ,"l" ,"m" ,"n" ,"o" ,"p" } ;
vector< string> m = { "ab" ,"ae" ,"af" ,"ba" ,"bc" ,"be" ,"bf" ,"bg" ,"cb" ,"cd" ,"cf" ,"cg" ,"ch" ,"dc" ,"dg" ,"dh" ,"ea" ,"eb" ,"ef" ,"ei" ,"ej" ,"fa" ,"fb" ,"fc" ,"fe" ,"fg" ,"fi" ,"fj" ,"fk" ,"gb" ,"gc" ,"gd" ,"gf" ,"gh" ,"gj" ,"gk" ,"gl" ,"hc" ,"hd" ,"hg" ,"hk" ,"hl" ,"ie" ,"if" ,"ij" ,"im" ,"in" ,"je" ,"jf" ,"jg" ,"ji" ,"jk" ,"jm" ,"jn" ,"jo" ,"kf" ,"kg," ,"kh" ,"kj" ,"kl" ,"kn" ,"ko" ,"kp" ,"lg" ,"lh" ,"lk" ,"lo" ,"lp" ,"mi" ,"mj" ,"mn" ,"ni" ,"nj" ,"nk" ,"nm" ,"no" ,"oj" ,"ok" ,"ol" ,"on" ,"op" ,"pk" ,"pl" ,"po" } ;
string sv = "z" ;
vector < string> vier, drei,funf,sechs,sieben,acht,neun,zehn;
string sp ;
string sh;
string sd, sr, so;
for ( int i= 0 ; i< 16 ; i++ ) {
sh = v[ i] ;
for ( int j= 0 ; j< 86 ; j++ ) {
sv = m[ j] ;
sd = m [ j] ;
sv.erase ( 1 ,1 ) ;
sd.erase ( 0 ,1 ) ;
if ( sh == sv && sh ! = sd)
{
sp = sh + sd;
drei.push_back ( sp) ;
}
}
}
int three = drei.size ( ) ;
cout << three << endl;
for ( size_t i= 0 ; i< three; i++ ) {
sh = drei[ i] ;
sr = drei [ i] ;
so = drei [ i] ;
sr.erase ( 0 ,1 ) ;
so.erase ( 1 ,1 ) ;
for ( size_t j= 0 ; j< 86 ; j++ ) {
sv = m[ j] ;
sd = m [ j] ;
sv.erase ( 1 ,1 ) ;
sd.erase ( 0 ,1 ) ;
if ( sr == sv && so ! = sd)
{
sp = sh + sd;
vier.push_back ( sp) ;
}
}
}
for ( int l= 0 ; l < 83 ; l++ ) {
cout << drei [ l] << endl;
}
for ( int k= 0 ; k< vier.size ( ) ; k++ ) {
cout << vier [ k] << endl;
}
cout << vier.size ( ) << endl;
string s3;
// int vier = vier.size ();
//vier
for ( size_t i= 0 ; i< vier.size ( ) ; i++ ) {
sh = vier[ i] ;
sr = vier [ i] ;
so = vier[ i] ;
s3 = vier[ i] ;
sr.erase ( 1 ,2 ) ;
so.erase ( 0 ,2 ) ;
s3.erase ( 0 ,1 ) ;
s3.erase ( 1 ,1 ) ;
for ( size_t j= 0 ; j< 86 ; j++ ) {
sv = m[ j] ;
sd = m [ j] ;
sv.erase ( 1 ,1 ) ;
sd.erase ( 0 ,1 ) ;
if ( sr == sv && so ! = sd && s3 ! = sd)
{
sp = sh + sd;
funf.push_back ( sp) ;
}
}
}
for ( int k= 0 ; k< funf.size ( ) ; k++ ) {
cout << funf [ k] << endl;
}
cout << funf.size ( ) << endl;
string s4;
// funf
for ( size_t i= 0 ; i< funf.size ( ) ; i++ ) {
sh = funf[ i] ;
sr = funf[ i] ;
so = funf[ i] ;
s3 = funf[ i] ;
s4 = funf[ i] ;
sr.erase ( 1 ,3 ) ;
so.erase ( 0 ,3 ) ;
s3.erase ( 0 ,1 ) ;
s3.erase ( 1 ,2 ) ;
s4.erase ( 0 ,2 ) ;
s4.erase ( 1 ,1 ) ;
for ( size_t j= 0 ; j< 86 ; j++ ) {
sv = m[ j] ;
sd = m [ j] ;
sv.erase ( 1 ,1 ) ;
sd.erase ( 0 ,1 ) ;
if ( sr == sv && so ! = sd && s3 ! = sd&& sd! = s4)
{
sp = sh + sd;
sechs.push_back ( sp) ;
}
}
}
for ( int k= 0 ; k < sechs.size ( ) ; k++ ) {
cout << sechs [ k] << endl;
}
cout << sechs.size ( ) << endl;
string s5;
//sechs
for ( size_t i= 0 ; i< sechs.size ( ) ; i++ ) {
sh = sechs[ i] ;
sr = sechs[ i] ;
so = sechs[ i] ;
s3 = sechs[ i] ;
s4 = sechs[ i] ;
s5 = sechs [ i] ;
sr.erase ( 1 ,4 ) ;
so.erase ( 0 ,4 ) ;
s3.erase ( 0 ,1 ) ;
s3.erase ( 1 ,3 ) ;
s4.erase ( 0 ,2 ) ;
s4.erase ( 1 ,2 ) ;
s5.erase ( 0 ,3 ) ;
s5.erase ( 1 ,1 ) ;
for ( size_t j= 0 ; j< 86 ; j++ ) {
sv = m[ j] ;
sd = m [ j] ;
sv.erase ( 1 ,1 ) ;
sd.erase ( 0 ,1 ) ;
if ( sr == sv && so ! = sd && s3 ! = sd&& sd! = s4&& sd! = s5)
{
sp = sh + sd;
sieben.push_back ( sp) ;
}
}
}
for ( int k= 0 ; k < sieben.size ( ) ; k++ ) {
cout << sieben [ k] << endl;
}
cout << sieben.size ( ) << endl;
string s6;
//sieben
for ( size_t i= 0 ; i< sieben.size ( ) ; i++ ) {
sh = sieben[ i] ;
sr = sieben[ i] ;
so = sieben[ i] ;
s3 = sieben[ i] ;
s4 = sieben[ i] ;
s5 = sieben[ i] ;
s6 = sieben[ i] ;
sr.erase ( 1 ,5 ) ;
so.erase ( 0 ,5 ) ;
s3.erase ( 0 ,1 ) ;
s3.erase ( 1 ,4 ) ;
s4.erase ( 0 ,2 ) ;
s4.erase ( 1 ,3 ) ;
s5.erase ( 0 ,3 ) ;
s5.erase ( 1 ,2 ) ;
s6.erase ( 0 ,4 ) ;
s6.erase ( 1 ,1 ) ;
for ( size_t j= 0 ; j< 86 ; j++ ) {
sv = m[ j] ;
sd = m [ j] ;
sv.erase ( 1 ,1 ) ;
sd.erase ( 0 ,1 ) ;
if ( sr == sv && so ! = sd && s3 ! = sd&& sd! = s4&& sd! = s5&& sd! = s6)
{
sp = sh + sd;
acht.push_back ( sp) ;
}
}
}
for ( int k= 0 ; k < acht.size ( ) ; k++ ) {
cout << acht [ k] << endl;
}
cout << acht.size ( ) << endl;
string s7;
//acht
for ( unsigned int i= 0 ; i< acht.size ( ) ; i++ ) {
sh = acht[ i] ;
sr = acht[ i] ;
so = acht[ i] ;
s3 = acht[ i] ;
s4 = acht[ i] ;
s5 = acht[ i] ;
s6 = acht[ i] ;
s7 = acht[ i] ;
sr.erase ( 1 ,6 ) ;
so.erase ( 0 ,6 ) ;
s3.erase ( 0 ,1 ) ;
s3.erase ( 1 ,5 ) ;
s4.erase ( 0 ,2 ) ;
s4.erase ( 1 ,4 ) ;
s5.erase ( 0 ,3 ) ;
s5.erase ( 1 ,3 ) ;
s6.erase ( 0 ,4 ) ;
s6.erase ( 1 ,2 ) ;
s7.erase ( 0 ,5 ) ;
s7.erase ( 1 ,1 ) ;
for ( size_t j= 0 ; j< 86 ; j++ ) {
sv = m[ j] ;
sd = m [ j] ;
sv.erase ( 1 ,1 ) ;
sd.erase ( 0 ,1 ) ;
if ( sr == sv && so ! = sd && s3 ! = sd&& sd! = s4&& sd! = s5&& sd! = s6&& sd! = s7)
{
sp = sh + sd;
neun.push_back ( sp) ;
}
}
}
for ( unsigned int k= 0 ; k < neun.size ( ) ; k++ ) {
cout << neun [ k] << endl;
}
cout << neun.size ( ) << endl;
cout << neun[ 177240 ] << endl;
// string s8;
//neun
// for (size_t i=0;i<neun.size();i++){
// sh = neun[i];
// sr = neun[i];
// so = neun[i];
// s3 = neun[i];
// s4 = neun[i];
// s5 = neun[i];
// s6 = neun[i];
// s7 = neun[i];
// s8 = neun[i];
// sr.erase (1,7);
// so.erase (0,7);
// s3.erase (0,1);
// s3.erase (1,6);
// s4.erase (0,2);
// s4.erase (1,5);
// s5.erase (0,3);
// s5.erase (1,4);
// s6.erase (0,4);
// s6.erase (1,3);
// s7.erase (0,5);
// s7.erase (1,2);
// s8.erase (0,6);
// s8.erase (1,1);
// for (size_t j=0;j<86;j++){
// sv = m[j];
// sd = m [j];
// sv.erase(1,1);
// sd.erase (0,1);
// if (sr == sv && so != sd && s3 != sd&&sd!=s4&&sd!=s5&&sd!=s6&&sd!=s7&&sd!=s8)
// {
// sp = sh + sd;
// zehn.push_back(sp);
// }
// }
// }
// for (int k=0;k <zehn.size();k++){
// cout << zehn [k] << endl;
//}
// cout << zehn.size ()<< endl;
}
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKCmludCBtYWluKCkKewogICAKICAgIHZlY3RvcjxzdHJpbmc+IHYgPSB7ImEiLCJiIiwiYyIsImQiLCJlIiwiZiIsImciLCJoIiwiaSIsImoiLCJrIiwibCIsIm0iLCJuIiwibyIsInAifTsKICAgIHZlY3RvcjxzdHJpbmc+IG0gPSB7ImFiIiwiYWUiLCJhZiIsImJhIiwiYmMiLCJiZSIsImJmIiwiYmciLCJjYiIsImNkIiwiY2YiLCJjZyIsImNoIiwiZGMiLCJkZyIsImRoIiwiZWEiLCJlYiIsImVmIiwiZWkiLCJlaiIsImZhIiwiZmIiLCJmYyIsImZlIiwiZmciLCJmaSIsImZqIiwiZmsiLCJnYiIsImdjIiwiZ2QiLCJnZiIsImdoIiwiZ2oiLCJnayIsImdsIiwiaGMiLCJoZCIsImhnIiwiaGsiLCJobCIsImllIiwiaWYiLCJpaiIsImltIiwiaW4iLCJqZSIsImpmIiwiamciLCJqaSIsImprIiwiam0iLCJqbiIsImpvIiwia2YiLCJrZywiLCJraCIsImtqIiwia2wiLCJrbiIsImtvIiwia3AiLCJsZyIsImxoIiwibGsiLCJsbyIsImxwIiwibWkiLCJtaiIsIm1uIiwibmkiLCJuaiIsIm5rIiwibm0iLCJubyIsIm9qIiwib2siLCJvbCIsIm9uIiwib3AiLCJwayIsInBsIiwicG8ifTsKICAgIAogICBzdHJpbmcgc3YgPSAieiI7CiAgICB2ZWN0b3IgPHN0cmluZz4gdmllciwgZHJlaSxmdW5mLHNlY2hzLHNpZWJlbixhY2h0LG5ldW4semVobjsKICAgIHN0cmluZyBzcCA7CiAgICBzdHJpbmcgc2g7CiAgICBzdHJpbmcgc2QsIHNyLCBzbzsKICAgCiAgICBmb3IgKGludCBpPTA7aTwxNjtpKyspewogICAgICAgIHNoID0gdltpXTsKICAgIAogICAgICAgCiAgICAgICAgZm9yIChpbnQgaj0wO2o8ODY7aisrKXsKICAgICAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgIHN2ID0gbVtqXTsKICAgICAgICBzZCA9IG0gW2pdOwogICAgICAgICAgCiAgICAgICAgc3YuZXJhc2UoMSwxKTsKICAgICAgICBzZC5lcmFzZSAoMCwxKTsKICAgICAgICAKICAgICAgICBpZiAoc2ggPT0gc3YgJiYgc2ggIT0gc2QpCiAgICAgICAgIHsKICAgICAgICAgIAogICAgICAgICAgc3AgPSBzaCArIHNkOyAgICAKICAgICAgICAgIAogICAgICAgICAgZHJlaS5wdXNoX2JhY2soc3ApOwogICAgICAgICB9CiAgICAgICAgCiAgICAgICAgCgkgICB9CgkgICB9CgkgICBpbnQgdGhyZWUgPSBkcmVpLnNpemUoKTsKCSAgIGNvdXQgPDwgdGhyZWUgPDwgZW5kbDsKCSAgIAoJICAgICAgIGZvciAoc2l6ZV90IGk9MDtpPHRocmVlO2krKyl7CiAgICAgICAgc2ggPSBkcmVpW2ldOwogICAgICAgIHNyID0gZHJlaSBbaV07CiAgICAgICAgc28gPSBkcmVpIFtpXTsKICAgICAgICBzci5lcmFzZSAoMCwxKTsKICAgICAgICBzby5lcmFzZSAoMSwxKTsKICAgICAgIAogICAgICAgIGZvciAoc2l6ZV90IGo9MDtqPDg2O2orKyl7CiAgICAgICAgc3YgPSBtW2pdOwogICAgICAgIHNkID0gbSBbal07CiAgICAgICAgICAKICAgICAgICBzdi5lcmFzZSgxLDEpOwogICAgICAgIHNkLmVyYXNlICgwLDEpOwogICAgICAgIAogICAgICAgIGlmIChzciA9PSBzdiAmJiBzbyAhPSBzZCkKICAgICAgICAgewogICAgICAgICAKICAgICAgICAgIAogICAgICAgICAgc3AgPSBzaCArIHNkOyAgICAKICAgICAgICAgIAogICAgICAgIHZpZXIucHVzaF9iYWNrKHNwKTsKICAgICAgICAgfQogICAgICAKICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIGZvciAoaW50IGw9MDtsIDw4MztsKyspewogICAgICAgICAgICAgICAgICAgIGNvdXQgPDxkcmVpIFtsXSA8PCBlbmRsOwogICAgICAgICAgfQogICAgICAgICBmb3IgKGludCBrPTA7azx2aWVyLnNpemUgKCk7aysrKXsKICAgIAogICAgY291dCA8PCB2aWVyIFtrXSA8PCBlbmRsOwogIH0KICAgIGNvdXQgPDwgdmllci5zaXplICgpPDwgZW5kbDsKICAgIHN0cmluZyBzMzsKICAvLyAgaW50IHZpZXIgPSB2aWVyLnNpemUgKCk7CiAgICAvL3ZpZXIKCSBmb3IgKHNpemVfdCBpPTA7aTx2aWVyLnNpemUoKTtpKyspewogICAgICAgIHNoID0gdmllcltpXTsKICAgICAgICBzciA9IHZpZXIgW2ldOwogICAgICAgIHNvID0gdmllcltpXTsKICAgICAgICBzMyA9IHZpZXJbaV07CiAgICAgICAgc3IuZXJhc2UgKDEsMik7CiAgICAgICAgc28uZXJhc2UgKDAsMik7CiAgICAgICAgczMuZXJhc2UgKDAsMSk7CiAgICAgICAgczMuZXJhc2UgKDEsMSk7CiAgICAgICAKICAgICAgICBmb3IgKHNpemVfdCBqPTA7ajw4NjtqKyspewogICAgICAgIHN2ID0gbVtqXTsKICAgICAgICBzZCA9IG0gW2pdOwogICAgICAgICAgCiAgICAgICAgc3YuZXJhc2UoMSwxKTsKICAgICAgICBzZC5lcmFzZSAoMCwxKTsKICAgICAgICAKICAgICAgICBpZiAoc3IgPT0gc3YgJiYgc28gIT0gc2QgJiYgczMgIT0gc2QpCiAgICAgICAgIHsKICAgICAgICAgCiAgICAgICAgICAKICAgICAgICAgIHNwID0gc2ggKyBzZDsgICAgCiAgICAgICAgICAKICAgICAgICBmdW5mLnB1c2hfYmFjayhzcCk7CiAgICAgICAgIH0KICAgICAgCiAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIAogICAgICAgICBmb3IgKGludCBrPTA7azxmdW5mLnNpemUoKTtrKyspewogICAgCiAgICBjb3V0IDw8IGZ1bmYgW2tdIDw8IGVuZGw7CiAgfQogICAgY291dCA8PCBmdW5mLnNpemUoKTw8IGVuZGw7CiAgICBzdHJpbmcgczQ7CiAgICAKICAgLy8gZnVuZgoJIGZvciAoc2l6ZV90IGk9MDtpPGZ1bmYuc2l6ZSgpO2krKyl7CiAgICAgICAgc2ggPSBmdW5mW2ldOwogICAgICAgIHNyID0gZnVuZltpXTsKICAgICAgICBzbyA9IGZ1bmZbaV07CiAgICAgICAgczMgPSBmdW5mW2ldOwogICAgICAgIHM0ID0gZnVuZltpXTsKICAgICAgICBzci5lcmFzZSAoMSwzKTsKICAgICAgICBzby5lcmFzZSAoMCwzKTsKICAgICAgICBzMy5lcmFzZSAoMCwxKTsKICAgICAgICBzMy5lcmFzZSAoMSwyKTsKICAgICAgICBzNC5lcmFzZSAoMCwyKTsKICAgICAgICBzNC5lcmFzZSAoMSwxKTsKICAgICAgIAogICAgICAgIGZvciAoc2l6ZV90IGo9MDtqPDg2O2orKyl7CiAgICAgICAgc3YgPSBtW2pdOwogICAgICAgIHNkID0gbSBbal07CiAgICAgICAgICAKICAgICAgICBzdi5lcmFzZSgxLDEpOwogICAgICAgIHNkLmVyYXNlICgwLDEpOwogICAgICAgIAogICAgICAgIGlmIChzciA9PSBzdiAmJiBzbyAhPSBzZCAmJiBzMyAhPSBzZCYmc2QhPXM0KQogICAgICAgICB7CiAgICAgICAgIAogICAgICAgICAgCiAgICAgICAgICBzcCA9IHNoICsgc2Q7ICAgIAogICAgICAgICAgCiAgICAgICAgc2VjaHMucHVzaF9iYWNrKHNwKTsKICAgICAgICAgfQogICAgICAKICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgCiAgICAgICAgIGZvciAoaW50IGs9MDtrIDxzZWNocy5zaXplKCk7aysrKXsKICAgIAogICAgY291dCA8PCBzZWNocyBba10gPDwgZW5kbDsKICB9CiAgICBjb3V0IDw8IHNlY2hzLnNpemUgKCk8PCBlbmRsOwoJc3RyaW5nIHM1OwoJLy9zZWNocwoJIGZvciAoc2l6ZV90IGk9MDtpPHNlY2hzLnNpemUoKTtpKyspewogICAgICAgIHNoID0gc2VjaHNbaV07CiAgICAgICAgc3IgPSBzZWNoc1tpXTsKICAgICAgICBzbyA9IHNlY2hzW2ldOwogICAgICAgIHMzID0gc2VjaHNbaV07CiAgICAgICAgczQgPSBzZWNoc1tpXTsKICAgICAgICBzNSA9IHNlY2hzIFtpXTsKICAgICAgICBzci5lcmFzZSAoMSw0KTsKICAgICAgICBzby5lcmFzZSAoMCw0KTsKICAgICAgICBzMy5lcmFzZSAoMCwxKTsKICAgICAgICBzMy5lcmFzZSAoMSwzKTsKICAgICAgICBzNC5lcmFzZSAoMCwyKTsKICAgICAgICBzNC5lcmFzZSAoMSwyKTsKICAgICAgICBzNS5lcmFzZSAoMCwzKTsKICAgICAgICBzNS5lcmFzZSAoMSwxKTsKICAgICAgIAogICAgICAgIGZvciAoc2l6ZV90IGo9MDtqPDg2O2orKyl7CiAgICAgICAgc3YgPSBtW2pdOwogICAgICAgIHNkID0gbSBbal07CiAgICAgICAgICAKICAgICAgICBzdi5lcmFzZSgxLDEpOwogICAgICAgIHNkLmVyYXNlICgwLDEpOwogICAgICAgIAogICAgICAgIGlmIChzciA9PSBzdiAmJiBzbyAhPSBzZCAmJiBzMyAhPSBzZCYmc2QhPXM0JiZzZCE9czUpCiAgICAgICAgIHsKICAgICAgICAgCiAgICAgICAgICAKICAgICAgICAgIHNwID0gc2ggKyBzZDsgICAgCiAgICAgICAgICAKICAgICAgICBzaWViZW4ucHVzaF9iYWNrKHNwKTsKICAgICAgICAgfQogICAgICAKICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgCiAgICAgICAgIGZvciAoaW50IGs9MDtrIDxzaWViZW4uc2l6ZSgpO2srKyl7CiAgICAKICAgIGNvdXQgPDwgc2llYmVuIFtrXSA8PCBlbmRsOwogIH0KICAgIGNvdXQgPDwgc2llYmVuLnNpemUgKCk8PCBlbmRsOwogICBzdHJpbmcgczY7CiAgICAgICAvL3NpZWJlbgoJIGZvciAoc2l6ZV90IGk9MDtpPHNpZWJlbi5zaXplKCk7aSsrKXsKICAgICAgICBzaCA9IHNpZWJlbltpXTsKICAgICAgICBzciA9IHNpZWJlbltpXTsKICAgICAgICBzbyA9IHNpZWJlbltpXTsKICAgICAgICBzMyA9IHNpZWJlbltpXTsKICAgICAgICBzNCA9IHNpZWJlbltpXTsKICAgICAgICBzNSA9IHNpZWJlbltpXTsKICAgICAgICBzNiA9IHNpZWJlbltpXTsKICAgICAgICBzci5lcmFzZSAoMSw1KTsKICAgICAgICBzby5lcmFzZSAoMCw1KTsKICAgICAgICBzMy5lcmFzZSAoMCwxKTsKICAgICAgICBzMy5lcmFzZSAoMSw0KTsKICAgICAgICBzNC5lcmFzZSAoMCwyKTsKICAgICAgICBzNC5lcmFzZSAoMSwzKTsKICAgICAgICBzNS5lcmFzZSAoMCwzKTsKICAgICAgICBzNS5lcmFzZSAoMSwyKTsKICAgICAgICBzNi5lcmFzZSAoMCw0KTsKICAgICAgICBzNi5lcmFzZSAoMSwxKTsKICAgICAgICAKICAgICAgIAogICAgICAgIGZvciAoc2l6ZV90IGo9MDtqPDg2O2orKyl7CiAgICAgICAgc3YgPSBtW2pdOwogICAgICAgIHNkID0gbSBbal07CiAgICAgICAgICAKICAgICAgICBzdi5lcmFzZSgxLDEpOwogICAgICAgIHNkLmVyYXNlICgwLDEpOwogICAgICAgIAogICAgICAgIGlmIChzciA9PSBzdiAmJiBzbyAhPSBzZCAmJiBzMyAhPSBzZCYmc2QhPXM0JiZzZCE9czUmJnNkIT1zNikKICAgICAgICAgewogICAgICAgICAKICAgICAgICAgIAogICAgICAgICAgc3AgPSBzaCArIHNkOyAgICAKICAgICAgICAgIAogICAgICAgIGFjaHQucHVzaF9iYWNrKHNwKTsKICAgICAgICAgfQogICAgICAKICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgCiAgICAgICAgIGZvciAoaW50IGs9MDtrIDxhY2h0LnNpemUoKTtrKyspewogICAgCiAgICBjb3V0IDw8IGFjaHQgW2tdIDw8IGVuZGw7CiAgfQogICAgY291dCA8PCBhY2h0LnNpemUgKCk8PCBlbmRsOwoJCglzdHJpbmcgczc7CgkvL2FjaHQKCSBmb3IgKHVuc2lnbmVkIGludCBpPTA7aTxhY2h0LnNpemUoKTtpKyspewogICAgICAgIHNoID0gYWNodFtpXTsKICAgICAgICBzciA9IGFjaHRbaV07CiAgICAgICAgc28gPSBhY2h0W2ldOwogICAgICAgIHMzID0gYWNodFtpXTsKICAgICAgICBzNCA9IGFjaHRbaV07CiAgICAgICAgczUgPSBhY2h0W2ldOwogICAgICAgIHM2ID0gYWNodFtpXTsKICAgICAgICBzNyA9IGFjaHRbaV07CiAgICAgICAgc3IuZXJhc2UgKDEsNik7CiAgICAgICAgc28uZXJhc2UgKDAsNik7CiAgICAgICAgczMuZXJhc2UgKDAsMSk7CiAgICAgICAgczMuZXJhc2UgKDEsNSk7CiAgICAgICAgczQuZXJhc2UgKDAsMik7CiAgICAgICAgczQuZXJhc2UgKDEsNCk7CiAgICAgICAgczUuZXJhc2UgKDAsMyk7CiAgICAgICAgczUuZXJhc2UgKDEsMyk7CiAgICAgICAgczYuZXJhc2UgKDAsNCk7CiAgICAgICAgczYuZXJhc2UgKDEsMik7CiAgICAgICAgczcuZXJhc2UgKDAsNSk7CiAgICAgICAgczcuZXJhc2UgKDEsMSk7CiAgICAgICAgCiAgICAgICAKICAgICAgICBmb3IgKHNpemVfdCBqPTA7ajw4NjtqKyspewogICAgICAgIHN2ID0gbVtqXTsKICAgICAgICBzZCA9IG0gW2pdOwogICAgICAgICAgCiAgICAgICAgc3YuZXJhc2UoMSwxKTsKICAgICAgICBzZC5lcmFzZSAoMCwxKTsKICAgICAgICAKICAgICAgICBpZiAoc3IgPT0gc3YgJiYgc28gIT0gc2QgJiYgczMgIT0gc2QmJnNkIT1zNCYmc2QhPXM1JiZzZCE9czYmJnNkIT1zNykKICAgICAgICAgewogICAgICAgICAKICAgICAgICAgIAogICAgICAgICAgc3AgPSBzaCArIHNkOyAgICAKICAgICAgICAgIAogICAgICAgIG5ldW4ucHVzaF9iYWNrKHNwKTsKICAgICAgICAgfQogICAgICAKICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGs9MDtrIDxuZXVuLnNpemUoKTtrKyspewogICAgCiAgICBjb3V0IDw8IG5ldW4gW2tdIDw8IGVuZGw7CiAgfQogICAgY291dCA8PCBuZXVuLnNpemUgKCk8PCBlbmRsOwogICAgY291dCA8PCBuZXVuWzE3NzI0MF08PCBlbmRsOwoKICAgIC8vICAgc3RyaW5nIHM4OwoJLy9uZXVuCgkvLyBmb3IgKHNpemVfdCBpPTA7aTxuZXVuLnNpemUoKTtpKyspewogICAgLy8gICAgc2ggPSBuZXVuW2ldOwogICAgIC8vICAgc3IgPSBuZXVuW2ldOwogICAgIC8vICAgc28gPSBuZXVuW2ldOwogICAgIC8vICAgczMgPSBuZXVuW2ldOwogICAgLy8gICAgczQgPSBuZXVuW2ldOwogICAgICAvLyAgczUgPSBuZXVuW2ldOwogICAgIC8vICAgczYgPSBuZXVuW2ldOwogICAgLy8gICAgczcgPSBuZXVuW2ldOwogICAgIC8vICAgczggPSBuZXVuW2ldOwogICAgIC8vICAgc3IuZXJhc2UgKDEsNyk7CiAgICAgIC8vICBzby5lcmFzZSAoMCw3KTsKICAgLy8gICAgIHMzLmVyYXNlICgwLDEpOwogICAgIC8vICAgczMuZXJhc2UgKDEsNik7CiAgICAvLyAgICBzNC5lcmFzZSAoMCwyKTsKICAgICAvLyAgIHM0LmVyYXNlICgxLDUpOwogICAgICAvLyAgczUuZXJhc2UgKDAsMyk7CiAgICAgLy8gICBzNS5lcmFzZSAoMSw0KTsKICAgICAvLyAgIHM2LmVyYXNlICgwLDQpOwogICAgLy8gICAgczYuZXJhc2UgKDEsMyk7CiAgIC8vICAgICBzNy5lcmFzZSAoMCw1KTsKICAgIC8vICAgIHM3LmVyYXNlICgxLDIpOwogICAgIC8vICAgczguZXJhc2UgKDAsNik7CiAgICAvLyAgICBzOC5lcmFzZSAoMSwxKTsKICAgICAgICAKICAgICAgIAogICAgLy8gICAgZm9yIChzaXplX3Qgaj0wO2o8ODY7aisrKXsKICAgICAvLyAgIHN2ID0gbVtqXTsKICAgICAvLyAgIHNkID0gbSBbal07CiAgICAgICAgICAKICAgICAvLyAgIHN2LmVyYXNlKDEsMSk7CiAgICAvLyAgICBzZC5lcmFzZSAoMCwxKTsKICAgICAgICAKICAgIC8vICAgIGlmIChzciA9PSBzdiAmJiBzbyAhPSBzZCAmJiBzMyAhPSBzZCYmc2QhPXM0JiZzZCE9czUmJnNkIT1zNiYmc2QhPXM3JiZzZCE9czgpCiAgICAgIC8vICAgewogICAgICAgICAKICAgICAgICAgIAogICAgLy8gICAgICBzcCA9IHNoICsgc2Q7ICAgIAogICAgICAgICAgCiAgICAvLyAgICB6ZWhuLnB1c2hfYmFjayhzcCk7CiAgICAgICAgLy8gfQogICAgICAKICAgICAgICAgIC8vICB9CiAgICAgICAvLyAgICAgfQogICAgICAgIAogICAgICAvLyAgIGZvciAoaW50IGs9MDtrIDx6ZWhuLnNpemUoKTtrKyspewogICAgCiAgLy8gIGNvdXQgPDwgemVobiBba10gPDwgZW5kbDsKICAvL30KICAgLy8gY291dCA8PCB6ZWhuLnNpemUgKCk8PCBlbmRsOwoJCgkKCQoJfQ==