local F = require 'ffi' local M = F.load 'ssl' F.cdef [[ typedef struct bignum_st { uint64_t *d; int top; int dmax; int neg; int flag; } BN; BN * BN_new(void); void BN_free(BN *); int BN_set_word(BN *, uint64_t); int BN_mul_word(BN *, uint64_t); char * BN_bn2dec(const BN *); void CRYPTO_free(void *, const char *, int); ]] print((function (f, g, n) if n>=50 then return "000000000000" end return f(g(n)):sub(-12) end)(function (bn) return F.string(F.gc(M.BN_bn2dec(bn), function (a) M.CRYPTO_free(a,"",0) end)) end, function (n) local bn = F.gc(M.BN_new(), M.BN_free) M.BN_set_word(bn, 1) for i=2,n do M.BN_mul_word(bn, i) end return bn end, io.stdin:read("*n")))