#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <inttypes.h>
#define gc getchar_unlocked
#define pc putchar_unlocked
void scanu(uint* n) {
*n = 0;
int ch = gc();
while (ch < '0' || ch > '9') {
ch = gc();
}
while (ch >= '0' && ch <= '9') {
*n = (*n << 3) + (*n << 1) + (ch - '0');
ch = gc();
}
}
//Big Endian
typedef struct {
uint length;
uint64_t* digsets;
} BigInt;
#define N 100
#define D 1000
#define BASE 100000000000000000
BigInt* facts[N + 1];
uint nf = 0;
BigInt* newBigInt(uint length, uint val) {
BigInt* res;
if ((res
= malloc(sizeof(BigInt
))) == NULL
) return NULL;
res->length = length;
if ((res
->digsets
= malloc(sizeof(uint64_t) * length
)) == NULL
) return NULL;
res->digsets[0] = val;
uint i;
for (i = 1; i < res->length; ++i) {
res->digsets[i] = 0;
}
return res;
}
void print(BigInt* f) {
char buffer[D];
uint i = f->length;
while (i > 0 && !f->digsets[--i]) {
}
uint b
=sprintf(buffer
,"%lu", f
->digsets
[i
]);
while (i--) {
//previously
//b+=sprintf( (buffer+b),"%017lu", f->digsets[i]);
b
+=sprintf( (buffer
+b
),"%017" PRIu64
, f
->digsets
[i
]); }
for (i = 0; i < b; ++i) {
pc(buffer[i]);
}
pc('\n');
}
BigInt* multiply(BigInt* f, uint n) {
uint i;
BigInt* r = newBigInt(f->length + 1, 0);
for (i = 0; i < f->length; ++i) {
r->digsets[i] += f->digsets[i] * n;
if (r->digsets[i] > BASE) {
r->digsets[i + 1] = r->digsets[i] / BASE;
r->digsets[i] -= r->digsets[i + 1] * BASE;
}
}
if (!r->digsets[r->length - 1]) {
r->length--;
}
return r;
}
BigInt* factorial(uint n) {
uint i;
for (i = nf; i <= n; ++i) {
facts[i] = multiply(facts[i - 1], i);
}
return facts[n];
}
int main(void) {
uint t;
scanu(&t);
facts[0] = newBigInt(1, 1);
facts[1] = facts[0];
nf = 2;
while (t--) {
uint n;
scanu(&n);
print(factorial(n));
}
return EXIT_SUCCESS;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0ZGludC5oPgojaW5jbHVkZSA8aW50dHlwZXMuaD4KCiNkZWZpbmUgZ2MgZ2V0Y2hhcl91bmxvY2tlZAojZGVmaW5lIHBjIHB1dGNoYXJfdW5sb2NrZWQKCnZvaWQgc2NhbnUodWludCogbikgewogICAqbiA9IDA7CiAgIGludCBjaCA9IGdjKCk7CiAgIHdoaWxlIChjaCA8ICcwJyB8fCBjaCA+ICc5JykgewogICAgICBjaCA9IGdjKCk7CiAgIH0KICAgd2hpbGUgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHsKICAgICAgKm4gPSAoKm4gPDwgMykgKyAoKm4gPDwgMSkgKyAoY2ggLSAnMCcpOwogICAgICBjaCA9IGdjKCk7CiAgIH0KfQoKLy9CaWcgRW5kaWFuCnR5cGVkZWYgc3RydWN0IHsKICAgdWludCBsZW5ndGg7CiAgIHVpbnQ2NF90KiBkaWdzZXRzOwp9IEJpZ0ludDsKCiNkZWZpbmUgTiAxMDAKI2RlZmluZSBEIDEwMDAKI2RlZmluZSBCQVNFIDEwMDAwMDAwMDAwMDAwMDAwMApCaWdJbnQqIGZhY3RzW04gKyAxXTsKdWludCBuZiA9IDA7CgpCaWdJbnQqIG5ld0JpZ0ludCh1aW50IGxlbmd0aCwgdWludCB2YWwpIHsKICAgQmlnSW50KiByZXM7CiAgIGlmICgocmVzID0gbWFsbG9jKHNpemVvZihCaWdJbnQpKSkgPT0gTlVMTCkKICAgICAgcmV0dXJuIE5VTEw7CiAgIHJlcy0+bGVuZ3RoID0gbGVuZ3RoOwogICBpZiAoKHJlcy0+ZGlnc2V0cyA9IG1hbGxvYyhzaXplb2YodWludDY0X3QpICogbGVuZ3RoKSkgPT0gTlVMTCkKICAgICAgcmV0dXJuIE5VTEw7CiAgIHJlcy0+ZGlnc2V0c1swXSA9IHZhbDsKICAgdWludCBpOwogICBmb3IgKGkgPSAxOyBpIDwgcmVzLT5sZW5ndGg7ICsraSkgewogICAgICByZXMtPmRpZ3NldHNbaV0gPSAwOwogICB9CiAgIHJldHVybiByZXM7Cn0KCnZvaWQgcHJpbnQoQmlnSW50KiBmKSB7CiAgIGNoYXIgYnVmZmVyW0RdOwogICB1aW50IGkgPSBmLT5sZW5ndGg7CiAgIHdoaWxlIChpID4gMCAmJiAhZi0+ZGlnc2V0c1stLWldKSB7CiAgIH0KICAgdWludCBiPXNwcmludGYoYnVmZmVyLCIlbHUiLCBmLT5kaWdzZXRzW2ldKTsKCiAgIHdoaWxlIChpLS0pIHsKICAgICAgLy9wcmV2aW91c2x5CiAgICAgIC8vYis9c3ByaW50ZiggKGJ1ZmZlcitiKSwiJTAxN2x1IiwgZi0+ZGlnc2V0c1tpXSk7CiAgICAgIGIrPXNwcmludGYoIChidWZmZXIrYiksIiUwMTciIFBSSXU2NCwgZi0+ZGlnc2V0c1tpXSk7CiAgIH0KICAgZm9yIChpID0gMDsgaSA8IGI7ICsraSkgewogICAgICBwYyhidWZmZXJbaV0pOwogICB9CiAgIHBjKCdcbicpOwp9CgpCaWdJbnQqIG11bHRpcGx5KEJpZ0ludCogZiwgdWludCBuKSB7CiAgIHVpbnQgaTsKICAgQmlnSW50KiByID0gbmV3QmlnSW50KGYtPmxlbmd0aCArIDEsIDApOwogICBmb3IgKGkgPSAwOyBpIDwgZi0+bGVuZ3RoOyArK2kpIHsKCiAgICAgIHItPmRpZ3NldHNbaV0gKz0gZi0+ZGlnc2V0c1tpXSAqIG47CiAgICAgIGlmIChyLT5kaWdzZXRzW2ldID4gQkFTRSkgewogICAgICAgICByLT5kaWdzZXRzW2kgKyAxXSA9IHItPmRpZ3NldHNbaV0gLyBCQVNFOwogICAgICAgICByLT5kaWdzZXRzW2ldIC09IHItPmRpZ3NldHNbaSArIDFdICogQkFTRTsKICAgICAgfQogICB9CiAgIGlmICghci0+ZGlnc2V0c1tyLT5sZW5ndGggLSAxXSkgewogICAgICByLT5sZW5ndGgtLTsKICAgfQogICByZXR1cm4gcjsKfQoKQmlnSW50KiBmYWN0b3JpYWwodWludCBuKSB7CiAgIHVpbnQgaTsKICAgZm9yIChpID0gbmY7IGkgPD0gbjsgKytpKSB7CiAgICAgIGZhY3RzW2ldID0gbXVsdGlwbHkoZmFjdHNbaSAtIDFdLCBpKTsKICAgfQogICByZXR1cm4gZmFjdHNbbl07Cn0KCmludCBtYWluKHZvaWQpIHsKICAgdWludCB0OwogICBzY2FudSgmdCk7CiAgIGZhY3RzWzBdID0gbmV3QmlnSW50KDEsIDEpOwogICBmYWN0c1sxXSA9IGZhY3RzWzBdOwogICBuZiA9IDI7CiAgIHdoaWxlICh0LS0pIHsKICAgICAgdWludCBuOwogICAgICBzY2FudSgmbik7CiAgICAgIHByaW50KGZhY3RvcmlhbChuKSk7CiAgIH0KICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKfQoK
MTAwCjEKMgozCjQKNQo2CjcKOAo5CjEwCjExCjEyCjEzCjE0CjE1CjE2CjE3CjE4CjE5CjIwCjIxCjIyCjIzCjI0CjI1CjI2CjI3CjI4CjI5CjMwCjMxCjMyCjMzCjM0CjM1CjM2CjM3CjM4CjM5CjQwCjQxCjQyCjQzCjQ0CjQ1CjQ2CjQ3CjQ4CjQ5CjUwCjUxCjUyCjUzCjU0CjU1CjU2CjU3CjU4CjU5CjYwCjYxCjYyCjYzCjY0CjY1CjY2CjY3CjY4CjY5CjcwCjcxCjcyCjczCjc0Cjc1Cjc2Cjc3Cjc4Cjc5CjgwCjgxCjgyCjgzCjg0Cjg1Cjg2Cjg3Cjg4Cjg5CjkwCjkxCjkyCjkzCjk0Cjk1Cjk2Cjk3Cjk4Cjk5CjEwMAo=
100
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100