#include <cstdio>
#include <limits>
#include <cstdint>
#include <vector>
#include <string>
#include <cstdio>
#include <iostream>
unsigned long factorial1(unsigned long(*self)(unsigned long), unsigned long n) {
return n ? n * self(n - 1) : 1;
}
template<class X, X(*Fn)(X(*)(X), X)>
X Function(X x) {
return Fn(Function<X, Fn>, x);
}
unsigned long factorial(unsigned long n) {
return Function<unsigned long, factorial1>(n);
};
int main() {
std::cout << factorial(1) << '\n';
std::cout << factorial(2) << '\n';
std::cout << factorial(3) << '\n';
std::cout << factorial(4) << '\n';
std::cout << factorial(5) << '\n';
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPGxpbWl0cz4KCiNpbmNsdWRlIDxjc3RkaW50PgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8Y3N0ZGlvPgojaW5jbHVkZSA8aW9zdHJlYW0+Cgp1bnNpZ25lZCBsb25nIGZhY3RvcmlhbDEodW5zaWduZWQgbG9uZygqc2VsZikodW5zaWduZWQgbG9uZyksIHVuc2lnbmVkIGxvbmcgbikgewoJcmV0dXJuIG4gPyBuICogc2VsZihuIC0gMSkgOiAxOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBYLCBYKCpGbikoWCgqKShYKSwgWCk+ClggRnVuY3Rpb24oWCB4KSB7CglyZXR1cm4gRm4oRnVuY3Rpb248WCwgRm4+LCB4KTsKfQoKdW5zaWduZWQgbG9uZyBmYWN0b3JpYWwodW5zaWduZWQgbG9uZyBuKSB7CglyZXR1cm4gRnVuY3Rpb248dW5zaWduZWQgbG9uZywgZmFjdG9yaWFsMT4obik7Cn07CgppbnQgbWFpbigpIHsKCXN0ZDo6Y291dCA8PCBmYWN0b3JpYWwoMSkgPDwgJ1xuJzsKCXN0ZDo6Y291dCA8PCBmYWN0b3JpYWwoMikgPDwgJ1xuJzsKCXN0ZDo6Y291dCA8PCBmYWN0b3JpYWwoMykgPDwgJ1xuJzsKCXN0ZDo6Y291dCA8PCBmYWN0b3JpYWwoNCkgPDwgJ1xuJzsKCXN0ZDo6Y291dCA8PCBmYWN0b3JpYWwoNSkgPDwgJ1xuJzsKfQ==