#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
#define main dummy_main
int main( ) {
return 0 ;
}
#undef main
long long c[ 60 ] [ 60 ] ;
class Solution{
public :
string kthSmallestPath( vector< int > & d, int k) {
int KrdatlYV, a2conNHc, i;
string res;
k-- ;
for ( i= ( 0 ) ; i< ( 60 ) ; i++ ) {
c[ 0 ] [ i] = 0 ;
}
for ( i= ( 0 ) ; i< ( 60 ) ; i++ ) {
c[ i] [ 0 ] = 1 ;
}
for ( i= ( 1 ) ; i< ( 60 ) ; i++ ) {
int j;
for ( j= ( 1 ) ; j< ( 60 ) ; j++ ) {
c[ i] [ j] = c[ i- 1 ] [ j- 1 ] + c[ i- 1 ] [ j] ;
}
}
while ( d[ 0 ] && d[ 1 ] ) {
if ( k < c[ d[ 0 ] + d[ 1 ] - 1 ] [ d[ 0 ] ] ) {
res + = "H" ;
d[ 1 ] -- ;
}
else {
k - = c[ d[ 0 ] + d[ 1 ] - 1 ] [ d[ 0 ] ] ;
res + = "V" ;
d[ 0 ] -- ;
}
}
for ( KrdatlYV= ( 0 ) ; KrdatlYV< ( d[ 0 ] ) ; KrdatlYV++ ) {
res + = "V" ;
}
for ( a2conNHc= ( 0 ) ; a2conNHc< ( d[ 1 ] ) ; a2conNHc++ ) {
res + = "H" ;
}
return res;
}
}
;
// cLay varsion 20201101-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// ll c[60][60];
//
// class Solution {
// public:
// string kthSmallestPath(vector<int>& d, int k) {
// string res;
//
// k--;
// rep(i,60) c[0][i] = 0;
// rep(i,60) c[i][0] = 1;
// rep(i,1,60) rep(j,1,60) c[i][j] = c[i-1][j-1] + c[i-1][j];
//
// while(d[0] && d[1]){
// if(k < c[d[0]+d[1]-1][d[0]]){
// res += "H";
// d[1]--;
// } else {
// k -= c[d[0]+d[1]-1][d[0]];
// res += "V";
// d[0]--;
// }
// }
// rep(d[0]) res += "V";
// rep(d[1]) res += "H";
//
// return res;
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUgKCJPZmFzdCIpCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbWFpbiBkdW1teV9tYWluCmludCBtYWluKCl7CiAgcmV0dXJuIDA7Cn0KI3VuZGVmIG1haW4KbG9uZyBsb25nIGNbNjBdWzYwXTsKY2xhc3MgU29sdXRpb257CiAgcHVibGljOgogIHN0cmluZyBrdGhTbWFsbGVzdFBhdGgodmVjdG9yPGludD4mIGQsIGludCBrKXsKICAgIGludCBLcmRhdGxZViwgYTJjb25OSGMsIGk7CiAgICBzdHJpbmcgcmVzOwogICAgay0tOwogICAgZm9yKGk9KDApO2k8KDYwKTtpKyspewogICAgICBjWzBdW2ldID0gMDsKICAgIH0KICAgIGZvcihpPSgwKTtpPCg2MCk7aSsrKXsKICAgICAgY1tpXVswXSA9IDE7CiAgICB9CiAgICBmb3IoaT0oMSk7aTwoNjApO2krKyl7CiAgICAgIGludCBqOwogICAgICBmb3Ioaj0oMSk7ajwoNjApO2orKyl7CiAgICAgICAgY1tpXVtqXSA9IGNbaS0xXVtqLTFdICsgY1tpLTFdW2pdOwogICAgICB9CiAgICB9CiAgICB3aGlsZShkWzBdICYmIGRbMV0pewogICAgICBpZihrIDwgY1tkWzBdK2RbMV0tMV1bZFswXV0pewogICAgICAgIHJlcyArPSAiSCI7CiAgICAgICAgZFsxXS0tOwogICAgICB9CiAgICAgIGVsc2V7CiAgICAgICAgayAtPSBjW2RbMF0rZFsxXS0xXVtkWzBdXTsKICAgICAgICByZXMgKz0gIlYiOwogICAgICAgIGRbMF0tLTsKICAgICAgfQogICAgfQogICAgZm9yKEtyZGF0bFlWPSgwKTtLcmRhdGxZVjwoZFswXSk7S3JkYXRsWVYrKyl7CiAgICAgIHJlcyArPSAiViI7CiAgICB9CiAgICBmb3IoYTJjb25OSGM9KDApO2EyY29uTkhjPChkWzFdKTthMmNvbk5IYysrKXsKICAgICAgcmVzICs9ICJIIjsKICAgIH0KICAgIHJldHVybiByZXM7CiAgfQp9CjsKLy8gY0xheSB2YXJzaW9uIDIwMjAxMTAxLTEKCi8vIC0tLSBvcmlnaW5hbCBjb2RlIC0tLQovLyAjZGVmaW5lIG1haW4gZHVtbXlfbWFpbgovLyB7fQovLyAjdW5kZWYgbWFpbgovLyAKLy8gbGwgY1s2MF1bNjBdOwovLyAKLy8gY2xhc3MgU29sdXRpb24gewovLyBwdWJsaWM6Ci8vICAgc3RyaW5nIGt0aFNtYWxsZXN0UGF0aCh2ZWN0b3I8aW50PiYgZCwgaW50IGspIHsKLy8gICAgIHN0cmluZyByZXM7Ci8vIAovLyAgICAgay0tOwovLyAgICAgcmVwKGksNjApIGNbMF1baV0gPSAwOwovLyAgICAgcmVwKGksNjApIGNbaV1bMF0gPSAxOwovLyAgICAgcmVwKGksMSw2MCkgcmVwKGosMSw2MCkgY1tpXVtqXSA9IGNbaS0xXVtqLTFdICsgY1tpLTFdW2pdOwovLyAKLy8gICAgIHdoaWxlKGRbMF0gJiYgZFsxXSl7Ci8vICAgICAgIGlmKGsgPCBjW2RbMF0rZFsxXS0xXVtkWzBdXSl7Ci8vICAgICAgICAgcmVzICs9ICJIIjsKLy8gICAgICAgICBkWzFdLS07Ci8vICAgICAgIH0gZWxzZSB7Ci8vICAgICAgICAgayAtPSBjW2RbMF0rZFsxXS0xXVtkWzBdXTsKLy8gICAgICAgICByZXMgKz0gIlYiOwovLyAgICAgICAgIGRbMF0tLTsKLy8gICAgICAgfQovLyAgICAgfQovLyAgICAgcmVwKGRbMF0pIHJlcyArPSAiViI7Ci8vICAgICByZXAoZFsxXSkgcmVzICs9ICJIIjsKLy8gCi8vICAgICByZXR1cm4gcmVzOwovLyAgIH0KLy8gfTsK