#!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;
	}
	return reverse @choices;
}

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);
	}
	return $p;
				
	
}

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 ++;
    }
    return $p;
}

	
sub nchoosek($$) { 
	my ($n, $k) = @_;
	my $p = 1;
	$p *= $_ for ( $k+1 .. $n) ;
	$p /= $_ for ( 2 .. $n-$k) ; 
	return $p;
}

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]++;
		}
	}
	return @choices;
}

while (<>) {
	my ($mode, @vals) = split;

	if ($mode =~ /^pn/) {
		my ($n, $k, @c) = @vals;
		my $p = permno($n, $k, @c);
		print $p . "\n";
	}
	elsif ($mode =~ /^p/) {
		my ($n,$k,$p) = @vals;
		my @c = nth_permutation($n,$k,$p);
		print join(',',@c) . "\n";
	}
	elsif ($mode =~ /^cn/) {
		my ($n, $k, @c) = @vals;
		my $p = combno($n, $k, @c);
		print $p . "\n";
	}
	else {
		my ($n,$k,$p) = @vals;
		my @c = nth_combination($n,$k,$p);
		print join(',',@c) . "\n";
	}

}


