#include <stdio.h>
void *stack[1024], **sp = stack;
#define CAT_(a, ...) a ## __VA_ARGS__
#define CAT(...) CAT_(__VA_ARGS__)
#define GOSUB(lbl) {*sp++ = &&CAT(L, __LINE__); goto lbl; CAT(L, __LINE__):;}
#define RETURN goto *--sp
int main(void) {
int n, f;
GOSUB(factorial);
return 0;
factorial:
f = 1;
while (n)
f *= n--;
RETURN;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp2b2lkICpzdGFja1sxMDI0XSwgKipzcCA9IHN0YWNrOwoKI2RlZmluZSBDQVRfKGEsIC4uLikgYSAjIyBfX1ZBX0FSR1NfXwojZGVmaW5lIENBVCguLi4pICAgICBDQVRfKF9fVkFfQVJHU19fKQojZGVmaW5lIEdPU1VCKGxibCkgICB7KnNwKysgPSAmJkNBVChMLCBfX0xJTkVfXyk7IGdvdG8gbGJsOyBDQVQoTCwgX19MSU5FX18pOjt9CiNkZWZpbmUgUkVUVVJOICAgICAgIGdvdG8gKi0tc3AKCmludCBtYWluKHZvaWQpIHsKICAgIGludCBuLCBmOwogICAgc2NhbmYoIiVkIiwgJm4pOwogICAgR09TVUIoZmFjdG9yaWFsKTsKICAgIHByaW50ZigiJWQiLCBmKTsKICAgIHJldHVybiAwOwoKZmFjdG9yaWFsOgogICAgZiA9IDE7CiAgICB3aGlsZSAobikKICAgICAgICBmICo9IG4tLTsKICAgIFJFVFVSTjsKfQo=