use std::io::{self, BufRead};
fn main() {
let stdin = io::stdin();
for line in stdin.lock().lines() {
if line.is_ok() {
let content = line.unwrap();
let n: u32 = content.parse().unwrap();
match reverse_factorial(n) {
Some(rev) => {
println!("{} = {}!", n, rev);
},
None => {
println!("{} NONE", n);
}
}
}
}
}
fn reverse_factorial(n: u32) -> Option<u32> {
let mut num = n;
}
} else {
None
}
}
#[cfg(test)]
mod tests {
use super::reverse_factorial;
#[test]
fn it_generates_some_reverse_factorial() {
let result = reverse_factorial(120);
println!("{:?}", result);
assert_eq!(5, result.unwrap());
assert_eq!(10, reverse_factorial(3628800).unwrap());
assert_eq!(12, reverse_factorial(479001600).unwrap());
assert_eq!(3, reverse_factorial(6).unwrap());
}
#[test]
fn it_generates_none_reverse_factorial() {
let result = reverse_factorial(150);
println!("{:?}", result);
assert!(reverse_factorial
(18).
is_none()); }
}
dXNlIHN0ZDo6aW86OntzZWxmLCBCdWZSZWFkfTsKCmZuIG1haW4oKSB7CiAgICBsZXQgc3RkaW4gPSBpbzo6c3RkaW4oKTsKICAgIGZvciBsaW5lIGluIHN0ZGluLmxvY2soKS5saW5lcygpIHsKICAgICAgICBpZiBsaW5lLmlzX29rKCkgewogICAgICAgICAgICBsZXQgY29udGVudCA9IGxpbmUudW53cmFwKCk7CiAgICAgICAgICAgIGxldCBuOiB1MzIgPSBjb250ZW50LnBhcnNlKCkudW53cmFwKCk7CiAgICAgICAgICAgIG1hdGNoIHJldmVyc2VfZmFjdG9yaWFsKG4pIHsKICAgICAgICAgICAgICAgIFNvbWUocmV2KSA9PiB7CiAgICAgICAgICAgICAgICAgICAgcHJpbnRsbiEoInt9ID0ge30hIiwgbiwgcmV2KTsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBOb25lID0+IHsKICAgICAgICAgICAgICAgICAgICBwcmludGxuISgie30gTk9ORSIsIG4pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CgpmbiByZXZlcnNlX2ZhY3RvcmlhbChuOiB1MzIpIC0+IE9wdGlvbjx1MzI+IHsKICAgIGxldCBtdXQgbnVtID0gbjsKICAgIGxldCBtdXQgZGl2ID0gMjsKCiAgICB3aGlsZSBudW0gJSBkaXYgPT0gMCB7CiAgICAgICAgbnVtIC89IGRpdjsKICAgICAgICBkaXYgKz0gMTsKICAgIH0KCiAgICBpZiBkaXYgJSBudW0gPT0gMCB7CiAgICAgICAgU29tZShkaXYgLSAxKQogICAgfSBlbHNlIHsKICAgICAgICBOb25lCiAgICB9Cn0KCiNbY2ZnKHRlc3QpXQptb2QgdGVzdHMgewogICAgdXNlIHN1cGVyOjpyZXZlcnNlX2ZhY3RvcmlhbDsKCiAgICAjW3Rlc3RdCiAgICBmbiBpdF9nZW5lcmF0ZXNfc29tZV9yZXZlcnNlX2ZhY3RvcmlhbCgpIHsKICAgICAgICBsZXQgcmVzdWx0ID0gcmV2ZXJzZV9mYWN0b3JpYWwoMTIwKTsKICAgICAgICBwcmludGxuISgiezo/fSIsIHJlc3VsdCk7CgogICAgICAgIGFzc2VydCEocmVzdWx0LmlzX3NvbWUoKSk7CiAgICAgICAgYXNzZXJ0X2VxISg1LCByZXN1bHQudW53cmFwKCkpOwoKICAgICAgICBhc3NlcnRfZXEhKDEwLCByZXZlcnNlX2ZhY3RvcmlhbCgzNjI4ODAwKS51bndyYXAoKSk7CiAgICAgICAgYXNzZXJ0X2VxISgxMiwgcmV2ZXJzZV9mYWN0b3JpYWwoNDc5MDAxNjAwKS51bndyYXAoKSk7CiAgICAgICAgYXNzZXJ0X2VxISgzLCByZXZlcnNlX2ZhY3RvcmlhbCg2KS51bndyYXAoKSk7CiAgICB9CgogICAgI1t0ZXN0XQogICAgZm4gaXRfZ2VuZXJhdGVzX25vbmVfcmV2ZXJzZV9mYWN0b3JpYWwoKSB7CiAgICAgICAgbGV0IHJlc3VsdCA9IHJldmVyc2VfZmFjdG9yaWFsKDE1MCk7CiAgICAgICAgcHJpbnRsbiEoIns6P30iLCByZXN1bHQpOwoKICAgICAgICBhc3NlcnQhKHJlc3VsdC5pc19ub25lKCkpOwoKICAgICAgICBhc3NlcnQhKHJldmVyc2VfZmFjdG9yaWFsKDE4KS5pc19ub25lKCkpOwogICAgfQp9