#pragma GCC optimize("Ofast") #pragma GCC target("avx2") int fac8[]={ 1, 927880474, 933245637, 668123525, 429277690, 733333339, 724464507, 957939114, 203191898, 586445753, 698611116, }; char*mmap(); #define MD 1000000007 main(){ char*rp=mmap(0l,1l<<28,1,2,0,0ll); int i=0; int c; while(c=*rp++-48,c>=0){ i=i*10+c; if(i>MD){ puts("0"); exit(0); } } --i; long z=fac8[i/100000000]; for(int j=i-i%100000000;++j<=i;){ z*=MD-j; z%=MD; } printf("%d\n",z); }