#![allow(non_snake_case)] use std::io::{ self, prelude::* }; macro_rules! pick { ($tokens:expr) => { $tokens.next().unwrap().parse().expect("parse error") } } fn factorial_mod(n: u64, m: u64) -> u64 { if n <= 1 { 1 } else { n * factorial_mod(n-1,m) % m } } fn f(n: u64) -> String { if n >= 50 { "000000000000".to_owned() } else { let x = factorial_mod(n, 10_000_000_000_000); if x >= 1_000_000_000_000 { format!("{:012}", x % 1_000_000_000_000) } else { format!("{}", x) } } } fn main() { let mut s = String::new(); io::stdin().read_to_string(&mut s).expect("i/o error"); let mut tokens = s.split_whitespace(); let N: u64 = pick!(tokens); let ans = f(N); println!("{}", ans); }