using
System;
class
GFG
{
static
int
MAX = 2 * 1000 + 10;
static
int
MOD = (
int
) (1e9 + 7);
static
long
[,]dp =
new
long
[MAX, MAX];
static
long
sum(
long
a,
long
b)
{
return
((a % MOD) + (b % MOD)) % MOD;
}
static
long
mul(
long
a,
long
b)
{
return
((a % MOD) * (b % MOD)) % MOD;
}
static
long
cntSpecialSet(
int
n)
{
for
(
int
i = 1; i <= n; i++)
{
dp[1, i] = 1;
dp[1, i] += dp[1, i - 1];
}
for
(
int
i = 2; i <= n; i++)
{
for
(
int
j = 2; j <= n; j++)
{
dp[i, j] = dp[i - 1, j - 2];
}
for
(
int
j = 1; j <= n; j++)
{
dp[i, j] = sum(dp[i, j], dp[i, j - 1]);
}
}
long
ways = 1, ans = 0;
for
(
int
i = 1; i <= n; i++)
{
ways = mul(ways, i);
ans = sum(ans, mul(ways, dp[i, n]));
}
return
ans;
}
public
static
void
Main(String[] args)
{
int
n = 3;
Console.WriteLine(cntSpecialSet(n));
}
}