#!perl
use strict;
use warnings;
use bigint;
sub nth_permutation($$$){
my ($n, $k, $p) = @_;
my @choices = ();
for my $i (0..$k-1) {
$choices[$i] = $p % ($n - $k + $i + 1);
for my $j (0..$i-1) {
$choices[$j] ++ if ($choices[$j] >= $choices[$i] ) ;
}
$p /= $n - $k + $i + 1;
}
}
sub permno($$@) {
my ($n, $k, @choices) = @_;
my $p = 0;
my $d = 1;
$d *= $_ for ($n-$k+1 .. $n-1);
for my $i ( 0 .. $k -1) {
my $c = $choices[$i];
for my $j (0 .. $i-1) {
$c -- if $choices[$j] < $choices[$i];
}
$p += $c * $d;
$d /= $n-($i+1);
}
}
sub combno($$@) {
my ($n, $k, @choices) = @_;
my $p = 0;
my $index = 0;
my $nk = nchoosek( $n, $k );
for my $i ( 0 .. $k -1) {
$nk *= ($k - $i);
$nk /= $n - $index - ($k - $i) + 1;
my $c = $choices[$i];
while ($index < $c ) {
$nk *= $n-$index - ($k -$i - 1);
$nk /= $n-$index;
$p += $nk;
$index ++;
}
$nk *= $n-$index - ($k -$i - 1);
$nk /= $n-$index;
$index ++;
}
}
sub nchoosek($$) {
my ($n, $k) = @_;
my $p = 1;
$p *= $_ for ( $k+1 .. $n) ;
$p /= $_ for ( 2 .. $n-$k) ;
}
sub nth_combination ($$$) {
my ($n, $k, $p) = @_;
my @choices = (0);
for my $i (0..$k-1) {
if ($i > 0 ) {$choices[$i]= $choices[$i-1]+1; }
for my $c ($choices[$i] .. $n - $k + $i + 1) {
my $n_c = nchoosek($n - 1 - $choices[$i], $k - 1 - $i);
last if $n_c > $p;
$p -= $n_c;
$choices[$i]++;
}
}
}
while (<>) {
my ($mode, @vals) = split;
if ($mode =~ /^pn/) {
my ($n, $k, @c) = @vals;
my $p = permno($n, $k, @c);
}
elsif ($mode =~ /^p/) {
my ($n,$k,$p) = @vals;
my @c = nth_permutation($n,$k,$p);
}
elsif ($mode =~ /^cn/) {
my ($n, $k, @c) = @vals;
my $p = combno($n, $k, @c);
}
else {
my ($n,$k,$p) = @vals;
my @c = nth_combination($n,$k,$p);
}
}
IyFwZXJsCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSBiaWdpbnQ7CgoKc3ViIG50aF9wZXJtdXRhdGlvbigkJCQpewoJbXkgKCRuLCAkaywgJHApID0gQF87CgkKCW15IEBjaG9pY2VzID0gICgpOwoJZm9yIG15ICRpICgwLi4kay0xKSB7CgkJJGNob2ljZXNbJGldID0gJHAgJSAoJG4gLSAkayArICRpICsgMSk7CgkJZm9yIG15ICRqICgwLi4kaS0xKSB7CgkJCSRjaG9pY2VzWyRqXSArKyBpZiAoJGNob2ljZXNbJGpdID49ICRjaG9pY2VzWyRpXSApICA7IAoJCX0KCQkkcCAvPSAkbiAtICRrICsgJGkgKyAxOwoJfQoJcmV0dXJuIHJldmVyc2UgQGNob2ljZXM7Cn0KCnN1YiBwZXJtbm8oJCRAKSB7CglteSAoJG4sICRrLCBAY2hvaWNlcykgPSBAXzsKCW15ICRwID0gMDsKCW15ICRkID0gMTsKCSRkICo9ICRfIGZvciAoJG4tJGsrMSAuLiAkbi0xKTsgIAoKCWZvciBteSAkaSAoIDAgLi4gJGsgLTEpIHsKCQlteSAkYyA9ICRjaG9pY2VzWyRpXTsKCQlmb3IgbXkgJGogKDAgLi4gJGktMSkgewoJCQkkYyAtLSBpZiAkY2hvaWNlc1skal0gPCAkY2hvaWNlc1skaV07CgkJfQoJCSRwICs9ICRjICogJGQ7CgkJJGQgLz0gJG4tKCRpKzEpOwoJfQoJcmV0dXJuICRwOwoJCQkJCgkKfQoKc3ViIGNvbWJubygkJEApIHsKICAgIG15ICgkbiwgJGssIEBjaG9pY2VzKSA9IEBfOwogICAgbXkgJHAgPSAwOwoKICAgIG15ICRpbmRleCA9IDA7CgogICAgbXkgJG5rID0gbmNob29zZWsoICRuLCAkayApOwoKICAgIGZvciBteSAkaSAoIDAgLi4gJGsgLTEpIHsKICAgICAgICAgICAgJG5rICo9ICgkayAtICRpKTsKICAgICAgICAgICAgJG5rIC89ICRuIC0gJGluZGV4IC0gKCRrIC0gJGkpICsgMTsKCiAgICAgICAgICAgIG15ICRjID0gJGNob2ljZXNbJGldOwoKICAgICAgICAgICAgd2hpbGUgKCRpbmRleCA8ICRjICkgewoKICAgICAgICAgICAgICAgICAgICAkbmsgKj0gJG4tJGluZGV4IC0gKCRrIC0kaSAtIDEpOwogICAgICAgICAgICAgICAgICAgICRuayAvPSAkbi0kaW5kZXg7CgogICAgICAgICAgICAgICAgICAgICRwICs9ICRuazsKICAgICAgICAgICAgICAgICAgICAkaW5kZXggKys7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJG5rICo9ICRuLSRpbmRleCAtICgkayAtJGkgLSAxKTsKICAgICAgICAgICAgJG5rIC89ICRuLSRpbmRleDsKCiAgICAgICAgICAgICRpbmRleCArKzsKICAgIH0KICAgIHJldHVybiAkcDsKfQoKCQpzdWIgbmNob29zZWsoJCQpIHsgCglteSAoJG4sICRrKSA9IEBfOwoJbXkgJHAgPSAxOwoJJHAgKj0gJF8gZm9yICggJGsrMSAuLiAkbikgOwoJJHAgLz0gJF8gZm9yICggMiAuLiAkbi0kaykgOyAKCXJldHVybiAkcDsKfQoKc3ViIG50aF9jb21iaW5hdGlvbiAoJCQkKSB7CglteSAoJG4sICRrLCAkcCkgPSBAXzsKCQoKCW15IEBjaG9pY2VzID0gKDApOwoJZm9yIG15ICRpICgwLi4kay0xKSB7CgkJCgkJaWYgKCRpID4gMCApIHskY2hvaWNlc1skaV09ICRjaG9pY2VzWyRpLTFdKzE7IH0KCQkKCQlmb3IgbXkgJGMgKCRjaG9pY2VzWyRpXSAuLiAkbiAtICRrICsgJGkgKyAxKSB7CgkJCQoJCQlteSAkbl9jID0gbmNob29zZWsoJG4gLSAxIC0gJGNob2ljZXNbJGldLCAkayAtIDEgLSAkaSk7CgkJCWxhc3QgaWYgJG5fYyA+ICRwOwkJCQoJCQkkcCAtPSAkbl9jOwoJCQkkY2hvaWNlc1skaV0rKzsKCQl9Cgl9CglyZXR1cm4gQGNob2ljZXM7Cn0KCndoaWxlICg8PikgewoJbXkgKCRtb2RlLCBAdmFscykgPSBzcGxpdDsKCglpZiAoJG1vZGUgPX4gL15wbi8pIHsKCQlteSAoJG4sICRrLCBAYykgPSBAdmFsczsKCQlteSAkcCA9IHBlcm1ubygkbiwgJGssIEBjKTsKCQlwcmludCAkcCAuICJcbiI7Cgl9CgllbHNpZiAoJG1vZGUgPX4gL15wLykgewoJCW15ICgkbiwkaywkcCkgPSBAdmFsczsKCQlteSBAYyA9IG50aF9wZXJtdXRhdGlvbigkbiwkaywkcCk7CgkJcHJpbnQgam9pbignLCcsQGMpIC4gIlxuIjsKCX0KCWVsc2lmICgkbW9kZSA9fiAvXmNuLykgewoJCW15ICgkbiwgJGssIEBjKSA9IEB2YWxzOwoJCW15ICRwID0gY29tYm5vKCRuLCAkaywgQGMpOwoJCXByaW50ICRwIC4gIlxuIjsKCX0KCWVsc2UgewoJCW15ICgkbiwkaywkcCkgPSBAdmFsczsKCQlteSBAYyA9IG50aF9jb21iaW5hdGlvbigkbiwkaywkcCk7CgkJcHJpbnQgam9pbignLCcsQGMpIC4gIlxuIjsKCX0KCn0KCgo=
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,35,32,36,34,39,29,27,33,26,37,40,30,31,41,28,38
836313165329095177704251551336018791641145678901234
85
6312
11284989655
3,17,24,50,83