func NR(n, r uint64) uint64 {
	return PowExp(n, r)
}
NR is Repeated permutation
package math2
import (
	"math/big"
	"github.com/yukirin/algo/sieve"
)
func Fact(n uint64) uint64 {
	if n == 0 {
		return 1
	}
	ans := uint64(1)
	for i := uint64(1); i <= n; i++ {
		ans *= i
	}
	return ans
}
func FactM(n, p uint64) uint64 {
	if n == 0 {
		return 1 % p
	}
	ret := uint64(1)
	for i := uint64(1); i <= n; i++ {
		ret *= i
		ret %= p
	}
	return ret
}
func NPR(n, r uint64) uint64 {
	p := n
	for i := n - r + 1; i < n; i++ {
		p *= i
	}
	return p
}
func NPRM(n, r, p uint64) uint64 {
	ret := n % p
	for i := n - r + 1; i < n; i++ {
		ret *= i
		ret %= p
	}
	return ret
}