import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
// 预加载 n!
static final int MOD = 1_000_000_007;
static final int MAX = 1_000_000; // 按需调整
static final long[] FACT = new long[MAX + 1];
static { // 类加载时一次性算完
FACT[0] = 1;
for (int i = 1; i <= MAX; i++)
FACT[i] = FACT[i - 1] * i % MOD;
}
// O(1) 查询
public static long factorial(int n) {
if (n < 0 || n > MAX) throw new IllegalArgumentException();
return FACT[n];
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
int n = in.nextInt();
long res = 0;
// 如果n 为偶数
if (n % 2 == 0) {
// 奇数集合与偶数集合的数量是一样的 n/2
int m = n / 2;
long mf = factorial(m);
// 奇数集合 有 n/2 !
// 偶数集合 有 n/2 !
// 但是可以交换两个集合排列的位置 奇数下标 0 2 4 偶数下标 1 3 5
// 偶数下标 0 2 4 奇数下标 1 3 5
res = mf * mf * 2 % MOD;
} else {
//n 为奇数
// 奇数集合数量为 n/2 +1
// 偶数集合数量为 n/2
long js = factorial(n / 2 + 1);
long os = factorial(n / 2);
// 奇数只能排 0 2 4
res = js * os % MOD;
}
System.out.println(res);
}
}