class Minstack {
has @.stack;
has @.min;
}
multi push(Minstack $mstack, $item) {
push $mstack.stack, $item;
if $mstack.min==0 or $mstack.min[*-1] > $item {
push $mstack.min, $item;
}
}
multi pop(Minstack $mstack) {
my $item=pop $mstack.stack;
if $item == $mstack.min[*-1] {
pop $mstack.min;
}
return $item;
}
multi min(Minstack $mstack) {
$mstack.min[*-1];
}
my $min=Minstack.new;
push $min, 5;
push $min, 3;
push $min, 10;
push $min, 2;
say(pop $min); # 2
say(min $min); # 3
say(pop $min); # 10
say(min $min); # 3
say(pop $min); # 3
say(min $min); # 5
say(pop $min); # 5