#include <iostream>
using namespace std;
const long long M = 1000000007;
const long long STEP = 10000000;
// Tu wklejasz tablicę wygenerowaną przez poprzedni program
// Zawiera ona wyniki dla: 0!, 10000000!, 20000000!, ..., 1000000000! mod (10^9 + 7)
long long kamienie[] = {
1, /* TUTAJ WKLEJ WYGENEROWANE LICZBY, BĘDZIE ICH OKOŁO 100 */
};
int main() {
// Ekstremalne przyspieszenie strumieni (bardzo ważne przy rygorystycznych limitach czasu)
ios_base::sync_with_stdio(false);
cin.tie(NULL);
long long n;
if (!(cin >> n)) return 0;
// Jeżeli N jest większe lub równe wartości modułu, jednym z czynników
// silni będzie M, więc cała reszta z dzielenia zawsze da 0.
if (n >= M) {
cout << 0 << "\n";
return 0;
}
// Szukamy, od jakiego kamienia milowego możemy zacząć
long long paczka = n / STEP;
long long res = kamienie[paczka];
// Obliczamy od kąd musimy ręcznie domnażać (np. od 30 000 001)
long long start = paczka * STEP + 1;
// Domnażamy resztę. Pętla wykona się maksymalnie 10 milionów razy (błyskawicznie)
for (long long i = start; i <= n; ++i) {
res = (res * i) % M;
}
cout << res << "\n";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGxvbmcgbG9uZyBNID0gMTAwMDAwMDAwNzsKY29uc3QgbG9uZyBsb25nIFNURVAgPSAxMDAwMDAwMDsKCi8vIFR1IHdrbGVqYXN6IHRhYmxpY8SZIHd5Z2VuZXJvd2FuxIUgcHJ6ZXogcG9wcnplZG5pIHByb2dyYW0KLy8gWmF3aWVyYSBvbmEgd3luaWtpIGRsYTogMCEsIDEwMDAwMDAwISwgMjAwMDAwMDAhLCAuLi4sIDEwMDAwMDAwMDAhIG1vZCAoMTBeOSArIDcpCmxvbmcgbG9uZyBrYW1pZW5pZVtdID0gewogICAgMSwgLyogVFVUQUogV0tMRUogV1lHRU5FUk9XQU5FIExJQ1pCWSwgQsSYRFpJRSBJQ0ggT0tPxYFPIDEwMCAqLwp9OwoKaW50IG1haW4oKSB7CiAgICAvLyBFa3N0cmVtYWxuZSBwcnp5c3BpZXN6ZW5pZSBzdHJ1bWllbmkgKGJhcmR6byB3YcW8bmUgcHJ6eSByeWdvcnlzdHljem55Y2ggbGltaXRhY2ggY3phc3UpCiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUoTlVMTCk7CgogICAgbG9uZyBsb25nIG47CiAgICBpZiAoIShjaW4gPj4gbikpIHJldHVybiAwOwoKICAgIC8vIEplxbxlbGkgTiBqZXN0IHdpxJlrc3plIGx1YiByw7N3bmUgd2FydG/Fm2NpIG1vZHXFgnUsIGplZG55bSB6IGN6eW5uaWvDs3cgCiAgICAvLyBzaWxuaSBixJlkemllIE0sIHdpxJljIGNhxYJhIHJlc3p0YSB6IGR6aWVsZW5pYSB6YXdzemUgZGEgMC4KICAgIGlmIChuID49IE0pIHsKICAgICAgICBjb3V0IDw8IDAgPDwgIlxuIjsKICAgICAgICByZXR1cm4gMDsKICAgIH0KCiAgICAvLyBTenVrYW15LCBvZCBqYWtpZWdvIGthbWllbmlhIG1pbG93ZWdvIG1vxbxlbXkgemFjesSFxIcKICAgIGxvbmcgbG9uZyBwYWN6a2EgPSBuIC8gU1RFUDsKICAgIGxvbmcgbG9uZyByZXMgPSBrYW1pZW5pZVtwYWN6a2FdOwogICAgCiAgICAvLyBPYmxpY3phbXkgb2Qga8SFZCBtdXNpbXkgcsSZY3puaWUgZG9tbmHFvGHEhyAobnAuIG9kIDMwIDAwMCAwMDEpCiAgICBsb25nIGxvbmcgc3RhcnQgPSBwYWN6a2EgKiBTVEVQICsgMTsKCiAgICAvLyBEb21uYcW8YW15IHJlc3p0xJkuIFDEmXRsYSB3eWtvbmEgc2nEmSBtYWtzeW1hbG5pZSAxMCBtaWxpb27Ds3cgcmF6eSAoYsWCeXNrYXdpY3puaWUpCiAgICBmb3IgKGxvbmcgbG9uZyBpID0gc3RhcnQ7IGkgPD0gbjsgKytpKSB7CiAgICAgICAgcmVzID0gKHJlcyAqIGkpICUgTTsKICAgIH0KCiAgICBjb3V0IDw8IHJlcyA8PCAiXG4iOwogICAgcmV0dXJuIDA7Cn0=