import java.util.stream.*;
import java.math.BigInteger;
class FacStream{
static public Stream<TwoBig> facPairs(){
return Stream
.iterate(new TwoBig(BigInteger.ONE,BigInteger.ONE)
,is -> new TwoBig
(is.i1().multiply
(is.i2().add(BigInteger.ONE))
,is.i2().add(BigInteger.ONE)));
}
static public Stream<BigInteger> facs(){
return facPairs().map(x->x.i1());
}
static public BigInteger fac(int n){
return facs().skip(n-1).findFirst().get();
}
}