def revfac(f):
"""
Takes a number (f) and returns the reverse factorial, if it has one.
Returns reverse factorial, or None.
"""
assert type(f) is int, "TypeError: f is not an integer."
assert f >= 0
if f == 0:
return 1
d = 1 # denominator
r = f % d # remainder
while r == 0:
if f == d:
return d
f /= d # Update numerator
d += 1 # Increase denominator
r = f % d # Update remainder
return None # Unnecessarily explicit return
i = [120, 150, 3628800, 479001600, 6, 18]
for n in i:
if revfac(n) is None:
print (str(n) + " NONE")
else:
print (str(n) + ' = ' + str(revfac(n)) + '!')
ZGVmIHJldmZhYyhmKToKICAgICIiIgogICAgVGFrZXMgYSBudW1iZXIgKGYpIGFuZCByZXR1cm5zIHRoZSByZXZlcnNlIGZhY3RvcmlhbCwgaWYgaXQgaGFzIG9uZS4KICAgIFJldHVybnMgcmV2ZXJzZSBmYWN0b3JpYWwsIG9yIE5vbmUuCiAgICAiIiIKICAgIGFzc2VydCB0eXBlKGYpIGlzIGludCwgIlR5cGVFcnJvcjogZiBpcyBub3QgYW4gaW50ZWdlci4iCiAgICBhc3NlcnQgZiA+PSAwCiAgICBpZiBmID09IDA6CiAgICAgICAgcmV0dXJuIDEKICAgIGQgPSAxICAgICAgICMgZGVub21pbmF0b3IKICAgIHIgPSBmICUgZCAgICMgcmVtYWluZGVyCiAgICB3aGlsZSByID09IDA6CiAgICAgICAgaWYgZiA9PSBkOgogICAgICAgICAgICByZXR1cm4gZAogICAgICAgIGYgLz0gZCAgIyBVcGRhdGUgbnVtZXJhdG9yCiAgICAgICAgZCArPSAxICAjIEluY3JlYXNlIGRlbm9taW5hdG9yCiAgICAgICAgciA9IGYgJSBkICAgIyBVcGRhdGUgcmVtYWluZGVyCiAgICByZXR1cm4gTm9uZSAjIFVubmVjZXNzYXJpbHkgZXhwbGljaXQgcmV0dXJuCgoKaSA9IFsxMjAsIDE1MCwgMzYyODgwMCwgNDc5MDAxNjAwLCA2LCAxOF0KCmZvciBuIGluIGk6CiAgICBpZiByZXZmYWMobikgaXMgTm9uZToKICAgICAgICBwcmludCAoc3RyKG4pICsgIiAgIE5PTkUiKQogICAgZWxzZToKICAgICAgICBwcmludCAoc3RyKG4pICsgJyA9ICcgKyBzdHIocmV2ZmFjKG4pKSArICchJyk=