#include #include #include #include #include #include #include #include #include #include #include #include"time.h" using namespace std; #define FOR(k,m,n) for(int (k)=(m);(k)<(n);(k)++) #define REP(i,n) FOR((i),0,(n)) #define LL long long #define CLR(a) memset((a),0,sizeof(a)) #define SZ(x) (int((x).size())) #define dump(x) cerr << #x << " = " << (x) << endl //毎回変える場所 #define INF 1000000007 //問題文のとおり vector aOdd = vector(); //aの奇数 vector aEven = vector();//aの偶数 LL imosuOdd=1; //aの奇数の部分和 LL imosuEven=0;//aの偶数の部分和 LL temp; int N; int main() { cin>>N; //配列aを作る aOdd.push_back(1); FOR(i,2, N + 1) { if(i%2){//indexが奇数 temp=i*imosuEven; temp%=INF; aOdd.push_back(temp); imosuOdd+=temp; imosuOdd%=INF; } else{//indexが偶数 temp=i*imosuOdd; temp %= INF; aEven.push_back(temp); imosuEven+=temp; imosuEven%=INF; } } if (N % 2) cout << aOdd.at(N / 2)<>N; */ return 0; }