class Num {
List<Integer> num
def Num() {
num = [1]
}
def mul(val) {
def Integer overflow = 0
for(i in 0..num.size()-1) {
num[i] = num[i] * val + overflow
overflow = num[i] / 10000
num[i] = num[i] % 10000
}
if(overflow > 0) {
num.push overflow
}
}
def String toString() {
def txt = Integer.toString(num.last())
for(i in num.size()-2..0) {
txt = txt.plus(Integer.toString(num[i]).padLeft(4, "0"))
}
txt
}
}
def n = new Num()
for(f in 2..150) {
n.mul(f)
}
println n
Y2xhc3MgTnVtIHsKICAgTGlzdDxJbnRlZ2VyPiBudW0KIAogICBkZWYgTnVtKCkgeyAKICAgICAgIG51bSA9IFsxXQogICB9CiAKICAgZGVmIG11bCh2YWwpIHsKICAgICAgIGRlZiBJbnRlZ2VyIG92ZXJmbG93ID0gMAogICAgICAgZm9yKGkgaW4gMC4ubnVtLnNpemUoKS0xKSB7CiAgICAgICAgICAgbnVtW2ldID0gbnVtW2ldICogdmFsICsgb3ZlcmZsb3cKICAgICAgICAgICBvdmVyZmxvdyA9IG51bVtpXSAvIDEwMDAwCiAgICAgICAgICAgbnVtW2ldID0gbnVtW2ldICUgMTAwMDAKICAgICAgIH0KICAgICAgIGlmKG92ZXJmbG93ID4gMCkgewogICAgICAgICAgIG51bS5wdXNoIG92ZXJmbG93CiAgICAgICB9CiAgIH0KIAogICBkZWYgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgICAgZGVmIHR4dCA9IEludGVnZXIudG9TdHJpbmcobnVtLmxhc3QoKSkKICAgICAgICBmb3IoaSBpbiBudW0uc2l6ZSgpLTIuLjApIHsKICAgICAgICAgICB0eHQgPSB0eHQucGx1cyhJbnRlZ2VyLnRvU3RyaW5nKG51bVtpXSkucGFkTGVmdCg0LCAiMCIpKQogICAgICAgfQogICAgICAgdHh0CiAgIH0KfQogCmRlZiBuID0gbmV3IE51bSgpCiAKZm9yKGYgaW4gMi4uMTUwKSB7CiAgbi5tdWwoZikKfQogCnByaW50bG4gbg==