#!perl

use strict;
use warnings;
use bigint;

sub nth_permutation($@) {
	my ($p, @c) = @_;
	my @repno;
	my $d = 1;
	my $fact = 1;
	my $n = scalar(@c);
	
	$fact *= $_ for (2..$n);
	
	
	for( @c ) {
	    $repno[$_] ++;
	    $d *= $repno[$_];
	}
	
  SLOT: for (my $i=0; $i<$n; $i++) {
	  $fact /= $n - $i;
	DIGIT: for (my $j=0; $j<scalar(@repno); $j++) {
	    if ($repno[$j] < 1) { next DIGIT; }
	    my $p2 = $fact / ($d / $repno[$j]);
	    if ($p2 > $p) {
		$d /= $repno[$j];
		$repno[$j] --;
		
		$c[$i] = $j;
		next SLOT;
	    }
	    $p -= $p2;
	}
  }	
	
	return @c;
}
    
sub permno(@) {
    my (@choices) = @_;
    my $n = @choices;

    # for now assume symbols are 0-based integers
    # with no gaps
    
    my @repno = map {0} (0..$n-1);  # number of times each symbol is repeated
     
    my $p = 0;
    my $d = 1;
   
    my $fact = 1;
 
    for (my $i = $n -1; $i >= 0; $i--) {
        my $c = $choices[$i];

	    $repno[$c] ++;
	    $d *= $repno[$c];

	    for (my $j = 0; $j < $c; $j ++ ) {
		next unless $repno[$j] > 0;
		$p += $fact / ( $d /$repno[$j]);
	    }
	    $fact *= $n - $i;	
    } 
    return $p;
}


while (<>) {
    my ($m, @c) = split(/\s*[,]*\s+/);
	if ($m =~ /^ *pn/) {
        my $p = permno( @c);
        print $p . "\n";
	}
	elsif ($m=~ /^ *p/) {
	    my ($p, @code) = @c;
	    my @order = nth_permutation($p, @code);
	    print join (' ', @order) . "\n";
	}
}