Problem:


Score : 200 points

Problem Statement

Snuke loves working out. He is now exercising N times.

Before he starts exercising, his power is 1. After he exercises for the i-th time, his power gets multiplied by i.

Find Snuke's power after he exercises N times. Since the answer can be extremely large, print the answer modulo 10^{9}+7.

Constraints

1 ≤ N ≤ 10^{5}

Input

The input is given from Standard Input in the following format:

N

Output

Print the answer modulo 10^{9}+7.

Sample Input 1

3

Sample Output 1

6

After Snuke exercises for the first time, his power gets multiplied by 1 and becomes 1.

After Snuke exercises for the second time, his power gets multiplied by 2 and becomes 2.

After Snuke exercises for the third time, his power gets multiplied by 3 and becomes 6.

Sample Input 2

10

Sample Output 2

3628800

Sample Input 3

100000

Sample Output 3

457992974

Print the answer modulo 10^{9}+7.



Sample input:
3


Sample output:
6

Submission status: Time Limit Exceeded

Solution code:
n = int(input())

power = 1
for i in range(1,n+1):
    power *= i

print(power%(10**9+7))

Submission status: Time Limit Exceeded

Solution code:
n=int(input())
x=1
for i in range(1,n+1):
    x*=i
print(x%(10**9+7))

Submission status: Time Limit Exceeded

Solution code:
n = int(input())

ans = 1
for i in range(1,n+1):
    ans *= i

print(ans %(10**9+7))

Submission status: Time Limit Exceeded

Solution code:
n=int(input())
ans=1
for i in range(1,n+1):
  ans=ans*i
print(ans%1000000007)

Submission status: Time Limit Exceeded

Solution code:
def main():
    N = int(input())
    ans = 1
    mod = 10**9 + 7
    for i in range(1, N + 1):
        ans *= i
    print(ans % mod)


if __name__ == "__main__":
    main()

Submission status: Time Limit Exceeded

Solution code:
n = int(input())

power = 1
for i in range(1,n+1):
  power = power * i 

print(power%(10**9+7))

Submission status: Time Limit Exceeded

Solution code:
n = int(input())
i = 1
p = 1

while i <= n:
    p *= i
    i += 1

print(p % 1000000007)

Submission status: Time Limit Exceeded

Solution code:

n=int(input())
ans=1
for i in range(1,n+1):
  ans*=i
print(ans%(10**9+7))

Submission status: Time Limit Exceeded

Solution code:
# ABC0555 - B - Training Camp

N=int(input())

ans=1

for i in range(1,N+1):
    ans*=i

if ans>=10**9+7:
    ans=ans%(10**9+7)

print(ans)

Submission status: Time Limit Exceeded

Solution code:
N = int(input())
p = 1
for i in range(N):
    p *= (i+1)
tp = p%((10**9)+7)
print(tp)

Submission status: Time Limit Exceeded

Solution code:
N = int(input())
power = 1
for i in range(1,N+1):
    power *= i
print(power % (10**9 + 7))

Submission status: Time Limit Exceeded

Solution code:
n = int(input())
j = 1
for i in range(1,n+1):
  k = i * j
  j = k
print(k%(10**9+7))

Submission status: Time Limit Exceeded

Solution code:
N = int(input())
total=1
for i in range(1,N+1):
  total *= i
ans =total%(10**9+7)
print(ans)

Submission status: Time Limit Exceeded

Solution code:
n = int(input())

ans = 1

for i in range(n):
    ans *= i + 1

print(ans % 1000000007)

Submission status: Time Limit Exceeded

Solution code:
#!/usr/bin/env python3
n = int(input())

ans = 1

for i in range(n):
    ans *= i + 1

print(ans % 1000000007)

Submission status: Time Limit Exceeded

Solution code:
number = int(input())

result = 1
for index in range(1, number + 1):
  result = result * index


dividor = 10 ** 9 + 7
print (result % dividor)

Submission status: Time Limit Exceeded

Solution code:
s = input()

n = int(s)

x = 1

for num in range(n):
    x *= num + 1

answer = x % ((1000000000) + 7)

print(answer)

Submission status: Time Limit Exceeded

Solution code:
n = int(input())
power = 1
for i in range(1,n+1):
  power*=i
if power<10**9+7:
  print(power)
else:
  print(power%(10**9+7))

Submission status: Time Limit Exceeded

Solution code:
import sys

input = sys.stdin.readline

def main():
    ans = 1
    N = int(input())
    for i in range(1,N+1):
        ans *= i 
    print(ans%(10**9+7))

if __name__ == '__main__':
    main()

Submission status: Time Limit Exceeded

Solution code:
n = int(input())
ans = 1
for i in range(1,n+1):
    ans *= i
print(ans%1000000007)

Submission status: Time Limit Exceeded

Solution code:
N = int(input())
power = 1
for i in range(N):
  power *= (i + 1)
print(power % (10**9 + 7))

Submission status: Time Limit Exceeded

Solution code:
N = int(input())

ans = 1
for i in range(1, N+1):
    ans *= i

print(ans%(10**9+7))

Submission status: Time Limit Exceeded

Solution code:
N=int(input())

res=1
for i in range(1,N+1):
  res=res*i

print(res%(10**9+7))

Submission status: Time Limit Exceeded

Solution code:
N = int(input())
power = 1
for i in range(1,N+1):
    power *= i
print(power%1000000007)

Submission status: Time Limit Exceeded

Solution code:
n = int(input())
a = 1
for i in range(1,n+1):
    a = i*a
a = a%(10**9+7)
print(a)

Submission status: Time Limit Exceeded

Solution code:
def resolve():
    number=1
    for i in range(1,int(input())+1):
        number*=i
    print(number%(10**9+7))
resolve()

Submission status: Time Limit Exceeded

Solution code:
N = int(input())
val = 1
for i in range(1, N+1):
    val *= i
print(val%(10**9 + 7))

Submission status: Time Limit Exceeded

Solution code:
N = int(input())
ans = 1

for i in range(1, N+1):
    ans *= i

print(ans % (10**9+7))

Submission status: Time Limit Exceeded

Solution code:
n = int(input())

p = 1
for i in range(1, n+1):
  p *= i
print(p % (10**9 + 7))

Submission status: Time Limit Exceeded

Solution code:
n = int(input())
power = 1
for i in range(1,n+1):
    power *= i
print(power%(10**9 + 7))

Submission status: Time Limit Exceeded

Solution code:
n=int(input())
num = 1
div=int(1e9)+7
for i in range(1,n+1):
  num *= i
print(num%div)

Submission status: Time Limit Exceeded

Solution code:
n = int(input())
ans = 1
for i in range(1, n+1):
  ans *= i
print(ans%(10**9+7))

Submission status: Time Limit Exceeded

Solution code:
N = int(input())
x = 10**9 + 7

dp = 1

for i in range(1, N+1):
    dp *= i

print(dp % x)

Submission status: Time Limit Exceeded

Solution code:
N = int(input())
mod = 10 ** 9 + 7
power = 1
for i in range(N):
    power = power * (i + 1)
print(power % mod)

Submission status: Time Limit Exceeded

Solution code:
N = int(input())
p = 1
for i in range(2, N + 1):
    p *= i
print(p % (10**9 + 7))

Submission status: Time Limit Exceeded

Solution code:
N=int(input())
power=1
for i in range(N):
    power=power*(i+1)

power=power%(10**9+7)
print(power)

Submission status: Time Limit Exceeded

Solution code:
n=int(input())
x=1
for i in range(1,n+1):
    x=x*(i%(10**9+7))
print(x%(10**9+7))

Submission status: Time Limit Exceeded

Solution code:
def training(N) :
  power = 1
  for i in range(1, N + 1) : 
    power *= i
    
  return power % (10 ** 9 + 7)

N = int(input())

print(training(N))

Submission status: Time Limit Exceeded

Solution code:
mod=10**9+7
n=int(input())
a=1
for i in range(1,n+1):
  a*=i
print(a%mod)

Submission status: Time Limit Exceeded

Solution code:
import sys, math, itertools, collections, bisect 
input = lambda: sys.stdin.buffer.readline().rstrip().decode('utf-8') 
inf = float('inf') ;mod = 10**9+7 
mans = inf ;ans = 0 ;count = 0 ;pro = 1

n = int(input())
for i in range(n):
    pro *= (i+1)
print(pro%mod)

Submission status: Time Limit Exceeded

Solution code:
#-*-coding:utf-8-*-

def main():
    n = int(input())
    ans =1
    for i in range(1,n+1):
        ans *=i
    print(ans%1000000007)

if __name__=="__main__":
    main()

Submission status: Time Limit Exceeded

Solution code:
def main():
  num = int(input())
  ans = 1
  for i in range(2,num+1):
    ans*=i
  print(ans%1000000007)

main()

Submission status: Time Limit Exceeded

Solution code:
N = int(input())
p = 1
for i in range(1,N+1):
    p *= i
print(p % ((10**9)+7))

Submission status: Time Limit Exceeded

Solution code:

n = int(input())


def func(times):
    power = 1
    divide_num = 10 ** 9 + 7

    for i in range(times):
        power *= (i + 1)

    print(power % divide_num)


func(times=n)

Submission status: Time Limit Exceeded

Solution code:
n = int(input())
cnt = 1
for i in range(1, n+1):
  cnt *= i

r = cnt % (10**9 + 7)
print(r)

Submission status: Time Limit Exceeded

Solution code:
import sys
n=int(input())
sys.setrecursionlimit(100000)
def ans(n):
    if n==1:
        return 1
    else:
        return n*ans(n-1)
print(ans(n)%1000000007)

Submission status: Time Limit Exceeded

Solution code:
n= int(input())
cnt = 1
for i in range(1,n+1):
  cnt *= i
print(cnt%(10**9+7))

Submission status: Time Limit Exceeded

Solution code:
i = int(input())
p = 1
m = (10 **9)+7 
for ii in range(1,i+1):
	ii %= m
	p *= ii

print(p % m)

Submission status: Time Limit Exceeded

Solution code:
i = int(input())
p = 1
for ii in range(1,i+1):
	p *= ii

print(p % ((10 **9)+7 ))

Submission status: Time Limit Exceeded

Solution code:
n = int(input())
a = 1
for i in range(1,n+1):
    a = a*i
print(a%(10**9+7))

Submission status: Time Limit Exceeded

Solution code:
n = int(input())
p = 1
for i in range(1, n+1):
    p *= i

print(p % (10**9+7))

Submission status: Time Limit Exceeded

Solution code:
import sys

N = int(sys.stdin.readline())

power = 1
for i in range(1,(N+1)):
    power = power * i

ans = power % (10**9 + 7)


print(ans)

Submission status: Time Limit Exceeded

Solution code:
i = int(input())
p = 1
for ii in range(1,i+1):
	p *= ii
ans = int(p % ((10 **9) +7))
print(ans)

Submission status: Time Limit Exceeded

Solution code:
n = int(input())
DIV=10**9+7
s=1
for i in range(1,n+1):
    s*=i
print(s%DIV)

Submission status: Time Limit Exceeded

Solution code:
n = int(input())
ans = 1
for i in range(2,n+1):
    ans*=i
ans = ans % (pow(10,9)+7)
print(ans)

Submission status: Time Limit Exceeded

Solution code:
n = int(input())
INF = 10**9+7

ans = 1
for i in range(1, n+1):
    ans *= i
print(ans%INF)

Submission status: Time Limit Exceeded

Solution code:
def main():
    n = int(input())
    ans = 1
    mod = 10**9 + 7
    for i in range(1,n+1):
        ans *= i
    print(ans%mod)

if __name__ == '__main__':
    main()

Submission status: Time Limit Exceeded

Solution code:
n=int(input())
ans = 1
for i in range(2,n+1):
  ans *= i
print(ans%(10**9+7))

Submission status: Time Limit Exceeded

Solution code:
n = int(input())
MOD = 10**9+7
p = 1
for i in range(1,n+1):
  p = (p*i)
print(p%MOD)

Submission status: Time Limit Exceeded

Solution code:
a=int(input())
p=1
b=a-1
while b>1:
    a=a*b
    b-=1
p=a%(10**9+7)
print(p)

Submission status: Time Limit Exceeded

Solution code:
n=int(input())
k=0
ans=1

for i in range(n):
  k = k+1
  ans=ans*k

print(ans%(10**9+7))

Submission status: Time Limit Exceeded

Solution code:
#A,B,C=map(float,input().split())
#a,b,c=map(int,input().split())
N=int(input())
ans=1
for i in range(1,N+1):
	ans*=i
print(ans%(1000000007))

Submission status: Time Limit Exceeded

Solution code:
n = int(input())
p = 1
for i in range(1, n + 1):
    p = p * i
print(p % 1000000007)

Submission status: Time Limit Exceeded

Solution code:
N = int(input())
r = 1

for n in range(1, N + 1):
    r *= n
print(r % ((10 ** 9) + 7))

Submission status: Time Limit Exceeded

Solution code:
n = int(input())
power = 1

for x in range(1, n+1):
  power = power * x
  
print(power % (10**9+7))

Submission status: Time Limit Exceeded

Solution code:
n = int(input())
power = 1
mod = 10**9 + 7
for i in range(1,n+1):
    power *= i
ans = power % mod
print(ans)

Submission status: Time Limit Exceeded

Solution code:
from collections import deque
from heapq import heapify,heappop,heappush,heappushpop
from copy import copy,deepcopy
from itertools import product,permutations,combinations,combinations_with_replacement
from collections import defaultdict,Counter
from bisect import bisect_left,bisect_right
# from math import gcd,ceil,floor,factorial
# from fractions import gcd
from functools import reduce
from pprint import pprint

INF = float("inf")

def mycol(data,col):
    return [ row[col] for row in data ]

def mysort(data,col,reverse_flag):
    data.sort(key=lambda x:x[col],reverse=reverse_flag)
    return data

def mymax(data):
    M = -1*float("inf")
    for i in range(len(data)):
        m = max(data[i])
        M = max(M,m)
    return M

def mymin(data):
    m = float("inf")
    for i in range(len(data)):
        M = min(data[i])
        m = min(m,M)
    return m

def mycount(ls,x):
    # lsはソート済みであること
    l = bisect_left(ls,x)
    r = bisect_right(ls,x)
    return (r-l)

def myoutput(ls,space=True):
    if space:
        if len(ls)==0:
            print(" ")
        elif type(ls[0])==str:
            print(" ".join(ls))
        elif type(ls[0])==int:
            print(" ".join(map(str,ls)))
        else:
            print("Output Error")
    else:
        if len(ls)==0:
            print("")
        elif type(ls[0])==str:
            print("".join(ls))
        elif type(ls[0])==int:
            print("".join(map(str,ls)))
        else:
            print("Output Error")

def I():
    return int(input())

def MI():
    return map(int,input().split())

def RI():
    return list(map(int,input().split()))

def CI(n):
    return [ int(input()) for _ in range(n) ]

def LI(n):
    return [ list(map(int,input().split())) for _ in range(n) ]

def S():
    return input()

def MS():
    return input().split()

def RS():
    return list(input().split())

def CS(n):
    return [ input() for _ in range(n) ]

def LS(n):
    return [ list(input().split()) for _ in range(n) ]

n = I()

mod = 10**9 + 7

ans = 1
for i in range(1,n+1):
    ans *= ( i % mod ) 
print(ans%mod)

Submission status: Time Limit Exceeded

Solution code:
import sys
from collections import Counter
from collections import deque
def input(): return sys.stdin.readline().strip()
def mp(): return map(int,input().split())
def lmp(): return list(map(int,input().split()))

mod=1000000007
n=int(input())
ans=1
for i in range(1,n+1):
    ans*=i%mod
print(ans%mod)

Submission status: Time Limit Exceeded

Solution code:
from sys import exit

ii = lambda : int(input())
mi = lambda : map(int,input().split())
li = lambda : list(map(int,input().split()))

n = ii()

power=1
for i in range(1,n+1):
    power *= i

print(power%(10**9+7))

Submission status: Time Limit Exceeded

Solution code:
N = int(input())
mod =10**9+7
ans = 1

for i in range(N):
    ans *=(i+1)

print(ans%mod)

Submission status: Time Limit Exceeded

Solution code:
import math
import copy
import re
mod = 10**9+7

n = int(input())
neko = 1
for i in range(n):
    neko *= (i+1)
print(neko%mod)

Submission status: Time Limit Exceeded

Solution code:
N = int(input())
n = 1000000007
p = 1
for i in range(1, N + 1):
    p *= i
print(p % n)

Submission status: Time Limit Exceeded

Solution code:
N=int(input())
power=1
for i in range(1,N+1):
    power=power*i
print(power%(10**9+7))

Submission status: Time Limit Exceeded

Solution code:
n = int(input())

ans = 1

for i in range(1, n+1):
    ans *= i
ans %= 1000000007

print(ans)

Submission status: Time Limit Exceeded

Solution code:

n = int(input())
ans = 1
mod = 10**9 + 7

for i in range(1,n+1):
    ans *= i

print(ans % mod)

Submission status: Time Limit Exceeded

Solution code:
n = int(input())
p = 1
for i in range(1, n + 1):
    p *= i
print(p % (10 ** 9 + 7))

Submission status: Time Limit Exceeded

Solution code:

N = int(input())


power = 1


for i in range(1, N + 1):
    power *= i


power %= 10 ** 9 + 7

print(power)

Submission status: Time Limit Exceeded

Solution code:
# N回だけトレーニングする
N = int(input())

# パワー
power = 1

# i回目のトレーニングを終えるとパワーが
# i倍されます。
for i in range(1, N + 1):
    power *= i

# 答えの値は非常に大きな値になることがあるので
# 10**9+7で割ったあまりを出力
power %= 10 ** 9 + 7

print(power)

Submission status: Time Limit Exceeded

Solution code:
n = int(input())
pwr = 1
for i in range(1,n+1):
  pwr *= i
print(pwr%(10**9+7))

Submission status: Time Limit Exceeded

Solution code:
N = int(input())
sum=1

for i in range(1, N+1):
    sum = (sum*i)

print(sum%1000000007)

Submission status: Time Limit Exceeded

Solution code:
import bisect,collections,copy,heapq,itertools,math,string
import sys
def S(): return sys.stdin.readline().rstrip()
def M(): return map(int,sys.stdin.readline().rstrip().split())
def I(): return int(sys.stdin.readline().rstrip())
def LI(): return list(map(int,sys.stdin.readline().rstrip().split()))
def LS(): return list(sys.stdin.readline().rstrip().split())
N = I()
xx = 10**9+7
ans = 1
for i in range(1, N+1):
    ans = ans*i
print(ans%xx)

Submission status: Time Limit Exceeded

Solution code:
N=int(input())
import math
power=1
for i in range(0,N):
  power=power*(i+1)
print(power%(10**9+7))

Submission status: Time Limit Exceeded

Solution code:
N = int(input())
P = 1
for i in range (N):
  P=P*(i+1)
print(P%(10**9+7))

Submission status: Time Limit Exceeded

Solution code:
N=int(input())
ans=1
for i in range(1,N+1):
    ans=ans*i
print(ans%((10**9)+7))

Submission status: Time Limit Exceeded

Solution code:
sum = 1
n = int(input())

for i in range(1,n+1):
    sum *= i

a = 10**9+7
print(sum%a)

Submission status: Time Limit Exceeded

Solution code:
N = int(input())
power = 1
for i in range(1,N+1):
    power *= i

power = power % (10**9+7)
print(power)

Submission status: Time Limit Exceeded

Solution code:
N = int(input())
ans = 1
for i in range(1,N+1):
  ans *= i
print(ans % (10**9 +7))

Submission status: Time Limit Exceeded

Solution code:
N = int(input())
fact = 1
for integer in range(1,N+1):
    fact *= integer

res = fact % 1000000007
print(res)

Submission status: Time Limit Exceeded

Solution code:
n=int(input())
s=1
for i in range(1,n+1):
    s*=i
ans=s%(10**9+7)
print(ans)

Submission status: Time Limit Exceeded

Solution code:
n = int(input())
ans = 1
for i in range(1,n+1):
  ans = ans * i
  
if ans >= (10**9+7):
  ans  =  ans%(10**9+7)
  
print(ans)

Submission status: Time Limit Exceeded

Solution code:
n = int(input())
m = 10**9+7

ans = 1
for i in range(2,n+1):
    ans*=i
print(ans%m)

Submission status: Time Limit Exceeded

Solution code:
n = int(input())
p = 1
for i in range(1,n+1):
    p*=i

print(p%(10**9+7))

Submission status: Time Limit Exceeded

Solution code:
n = int(input())
ans = 1
for i in range(1, n+1):
    ans *= i
ans = ans % (10**9 + 7)
print(ans)

Submission status: Time Limit Exceeded

Solution code:
# -*- coding: utf-8 -*-
import sys

import fractions
import copy
import bisect
import math
import numpy as np
import itertools
from itertools import combinations_with_replacement
#import math#数学的計算はこれでいける。普通に0.5乗しても計算可能
#w=input()
from operator import itemgetter
from sys import stdin
#input = sys.stdin.readline#こっちの方が入力が早いが使える時に使っていこう
from operator import mul
from functools import reduce
from collections import Counter
#from collections import deque

#input = stdin.readline


j=0
k=0
n=3
r=1
a=[0]
#n=int(input())
#r=int(input())
#print(M)
#A=int(input())
#B=int(input())
#print(N)
"1行1つの整数を入力を取得し、整数と取得する"


#number_list=list(map(int, input().split(" ")))#数字の時
#print(number_list)
"12 21 332 とか入力する時に使う"
"1行に複数の整数の入力を取得し、整数として扱う"

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#メモ
for i in number_list:#こっちの方がrage使うより早いらしい
    print(number_list[i-1])#

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'''
x=[]
y=[]
for i in range(N):
    x1, y1=[int(i) for i in input().split()]
    x.append(x1)
    y.append(y1)
print(x)
print(y)
"複数行に2数値を入力する形式 x座標とy座標を入力するイメージ"
'''

'''
mixlist=[]
for i in range(N):
    a,b=input().split()
    mixlist.append((int(a),b))
print(mixlist)
"複数行にintとstrを複合して入力するやつ，今回はリスト一つで処理している"
'''

'''
#array=[input().split()for i in range(N)]
#print(type(array[0][0]))
#print(array)
"正方行列にstr型の値を入力"
'''

#brray=[list(map(int, input().split(" ")))for i in range(N)]
#print(type(brray[0][0]))
#print(brray)
'''
入力
1 2
4 5
7 8
出力結果
[[1, 2], [4, 5], [7, 8]]
'''
"列数に関して自由度の高いint型の値を入力するタイプの行列"
#以下に別解を記載
#N, M = [int(i) for i in input().split()]
'''
table = [[int(i) for i in input().split()] for m in range(m)]

print(type(N))
print(N)
print(type(M))
print(M)

print(type(table))
print(table)
'''




#s=input()
#a=[int(i) for i in s]
#print(a[0])
#print([a])
#単数値．桁ごとに分割したい．入力と出力は以下の通り
#イメージとして1桁ごとにリストに値を入れているかんじ
#intを取ると文字列分解に使える
'''
入力
1234
出力
1
[[1, 2, 3, 4]]
'''




'''
word_list= input().split(" ")
print(word_list[0])
"連続文字列の入力"
"qw er ty とかの入力に使う"
"入力すると空白で区切ったところでlistの番号が与えられる"
'''



'''
A, B, C=stdin.readline().rstrip().split()#str style 何個でもいけることが多い
print(A)
"リストではなく独立したstr型を入れるなら以下のやり方でOK"
'''


#a= stdin.readline().rstrip()
#print(a.upper())
"aという変数に入っているものを大文字にして出力"


#a,b=map(int, input().split())  #int style 複数数値入力　「A B」みたいなスペース空いた入力のとき

#なんかうまく入力されるけど
#a=[[int(i) for i in 1.strip()]for 1 in sys.stdin]
#a = [[int(c) for c in l.strip()] for l in sys.stdin]]
#print(a)
#複数行の数値を入力して正方行列を作成


##############################################################################################
##############################################################################################
#under this line explains example calculation



'''
コンビネーションの組み合わせの中身を出力する形式
for i in itertools.combinations(brray, 2)
combinationsをpermutationsにすれば順列になる
今回なら(abc133B)
入力
1 2
5 5
-2 8
出力
[[1, 2], [5, 5], [-2, 8]]
もちろん一次元リストでも使えるし
何よりiもリストのように使えるので便利
'''

#nCr combination
'''
def cmb(n,r):
    #When n < r , this function isn't valid
    r= min(n-r,r)
    #print(n,r)
    if r == 0: return 1
    over = reduce(mul, range(n, n-r, -1))
    #flochart mul(n,n-1)=x
    #next     mul(x,n-2)........(n-r+1,n-r)
    #mul read a,b and returns a*b

    under = reduce(mul, range(1, r+1))
    #print(over, under)
    #reduce is applied mul(1,2)=2
    #next   mul(2,3)=6
    #next   mul(6,4)=4.........last(r!,r+1)=r+1!

    return over // under
    #// is integer divide
    #calc example 5C2
    #over=5*4*3
    #under=3*2*1
a = cmb(n, r)
#print(a)
'''

'''
import itertools
from itertools import combinations_with_replacement

combinationについて
以下の違いを意識しよう
combinations() p, r 長さrのタプル列、ソートされた順で重複なし

combinations_with_replacement() p, r 長さrのタプル列、ソートされた順で重複あり


使用例 　　　　　　　　　　　                  出力　　
combinations('ABCD', 2)　　　　　　　　　　　　AB AC AD BC BD CD

combinations_with_replacement('ABCD', 2)　　 AA AB AC AD BB BC BD CC CD DD
'''



'''
#集計
#example
#a=[2,2,2,3,4,3,1,2,1,3,1,2,1,2,2,1,2,1]
#a=Counter(a)
for i in a.most_common(n):print(i)
#most_common()メソッドは、出現回数が多い要素順にCounterオブジェクトを並び替えます。
#引数にint型の数字nを設定した場合は、出現回数が高い上位ｎ個の要素を返します。
#何も設定しなければ、コンテナ型にあるすべての要素を出現回数の順番に並び替えたタプル型オブジェクトを返します。
#out put
#(2, 8)
 #(1, 6)
#(3, 3)
#(4, 1)
'''


#二部探索(binary search)
#A = [1, 2, 3, 3, 3, 4, 4, 6, 6, 6, 6]
#print(A)
#index = bisect.bisect_left(A, 5) # 7 最も左(前)の挿入箇所が返ってきている
#A.insert(index, 5)
#print(index)
#print(A)
'''
bisect.bisect_left(a, x, lo=0, h=len(a))
引数
a: ソート済みリスト
x: 挿入したい値
lo: 探索範囲の下限
hi: 探索範囲の上限
(lo, hiはスライスと同様の指定方法)
bisect_leftはソートされたリストaに対して順序を保ったままxを挿入できる箇所を探索します。leftが示す通り、aにすでにxが存在している場合は、挿入箇所は既存のxよりも左側になります。また、lo, hiを指定することで探索範囲を絞り込むことも可能です。デフォルトはaの全体が探索対象です。
'''

'''
素数の判定
'''


def is_prime(n):
    if n == 1: return False

    for k in range(2, int(np.sqrt(n)) + 1):
        #sqrt(n)+1以上は考えて約数はないので却下
        if n % k == 0:
            return False
            #割り切れたらFalse
    return True


'''
npのmaxとmaximumの違い
xs = np.array([1, -2, 3])
np.max(xs, 0)
この出力は3となります．[1, -2, 3]と0の4つの数字のうち，最も大きい値を出力します．

一方で，[max(1, 0), max(-2, 0), max(3, 0)]を出力したい時があります．
その時は，numpyのmaximum関数を用います．

xs = np.array([1, -2, 3])
np.maximum(xs, 0)  # [1, 0, 3]

'''



########################################################################
########################################################################
#b2=a[:]  #1次元のときはコピーはこれで良い
#print(b2)

#a= [[0]*3 for i in range(5)] #2次元配列はこう準備、[[0]*3]*5だとだめ
#b3=copy.deepcopy(a)  #2次元配列はこうコピーする
#print(b3)

def factorial(x, mod=10**9+7):
    # x!
    # 階乗
    # ex) factorial(5) = 120
    tmp = 1
    for i in range(1, x+1):
        tmp = (tmp * i) % mod
    return tmp

def main():

    w=1
    j=0
    k=0
    dl=[]
    po=1
    n=int(input())
    #print(factorial(n))
    for i in range(1,n+1):
        po=po*(i)
    print(po%(10**9+7))
    #r=int(input())
    #dp= [[0]*3 for i in range(5)]#列　行
    #dp用の0の入ったやつ
    #dp= [[0]*(w+1) for i in range(n+1)]#0からwまでのw+1回計算するから
    #print(dp)＃初期条件が入る分計算回数+1列分必要(この場合は判断すべきものの数)
    DP = np.zeros(w+1, dtype=int)#これでも一次元リストが作れる
    exdp=np.zeros((3,4)) # ３×４の２次元配列を生成。2次元ならこう
    #dtypeは指定しないとfloatになる
    #for i in range(n):#ちょっとした入力に便利
    #    a, b = map(int, input().split())
        #dp[i][0] += [a]
        #これだとintとlistをつなぐことになって不適
    #    dp[i] += [a]
    #    dp[i] += [b]
        #これはうまくいく
        #やり方はいろいろあるということ
    #print(dp)


    "1行1つの整数を入力を取得し、整数と取得する"
    #number_list=list(map(int, input().split(" ")))#数字の時
    #print(number_list)
    "12 21 332 とか入力する時に使う"
    "1行に複数の整数の入力を取得し、整数として扱う"
    #brray=[list(map(int, input().split(" ")))for i in range(N)
    #print(brray)


    #s=input()
    #a=[int(i) for i in s]#int取るとstrでも行ける
    #print(a)
    '''
    入力
    1234
    出力
    [1, 2, 3, 4]
    '''
    pin_l=["x" for i in range(10)]#内包表記に慣れろ
    #print(pin_l)

    ls = ["a", "b", "c", "d", "e"]


    #print(ls[2:5])
    #スライスでの取得

    #print(ls[:-3])
    #一番左端から右から3番目より左まで取得

    #print(ls[:4:2])
    #スライスで1個飛ばしで取得
    #ないときは左端スタート
    #始点のインデックス番号 : 終点のインデックス番号 : スキップする数+1
    #print(ls[::2])
    '''
    lsというリストの場合に、1つ飛びの値を取得したい場合には
    ls[::2]
    のようにします。こうすると、
    ["a", "c", "d"]と出力される
    '''

if __name__ == "__main__":
    main()