fork download
  1. // ROOT : DRAGON3012009
  2. #include <bits/stdc++.h>
  3. #define ll long long
  4. #define ld long double
  5. #define el "\n"
  6. #define fast ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  7. #define __ROOT__ int main()
  8. #pragma GCC optimize("O2")
  9. //#pragma GCC optimize("unroll-loops")
  10. //#pragma GCC target("avx2,bmi,bmi2,popcnt,lzcnt")
  11. #define FOR(i,l,r) for(int i = l ; i <= r ; i ++)
  12. #define FORD(i,r,l) for(int i = r ; i >= l ; i --)
  13. #define REP(i, a ) for(int i = 0 ; i < a ; i ++ )
  14. #define fi first
  15. #define se second
  16. #define M 1000000007
  17. #define MAXN 10001
  18. #define INF (1ll<<30)
  19. #define BLOCK_SIZE 425
  20. #define MAX_NODE 1001001
  21. #define LOG 19
  22. #define ALPHA_SIZE 26
  23. #define BASE 256
  24. #define NAME "file"
  25. #define compare(v) sort((v).begin(), (v).end()); (v).erase(unique((v).begin(), (v).end()), (v).end());
  26. using namespace std;
  27. using namespace chrono ;
  28. const ll MOD[] = {(ll )1e9 + 2277, (ll )1e9 + 5277, (ll )1e9 + 8277, (ll )1e9 + 9277, (ll ) 1e9 + 7 };
  29. const ll NMOD = 1;
  30. const int dx[] = {-1, 0, 1,0};
  31. const int dy[] = {0, 1, 0, -1};
  32. //**Variable**//
  33. ll n ;
  34. ll arr[MAXN];
  35. ll frag[MAXN] ;
  36. ll rev_frag[MAXN] ;
  37. //**Struct**//
  38.  
  39. //**Function**//
  40. template<class X, class Y >
  41. bool minimize(X & x, const Y &y ) {
  42. return x > y ? x = y, 1:0 ;
  43. }
  44. template<class X, class Y >
  45. bool maximize(X &x, const Y &y ) {
  46. return x < y ? x = y, 1:0 ;
  47. }
  48. ll power(ll a , ll b) {
  49. ll res = 1;
  50. while(b ) {
  51. if(b & 1 ) res =res * a % M ;
  52. b >>=1 ;
  53. a = a * a % M;
  54. }
  55. return res ;
  56. }
  57. ll add(ll a , ll b ) {
  58. return (a + b ) % M ;
  59. }
  60. ll mul(ll a, ll b ) {
  61. return a * b % M ;
  62. }
  63. void init() {
  64. cin>>n;
  65. FOR(i,0 , 9 ) cin >> arr[i] ;
  66. frag[0] = 1 ;
  67. rev_frag[0]= 1;
  68. FOR(i , 1, MAXN - 1 ) frag[i] = frag[i-1] * i % M ;
  69. FOR(i , 1 , MAXN -1 ) rev_frag[i] = power(frag[i] , M-2 ) ;
  70. }
  71. ll C(ll k , ll m ) {
  72. if( k > m ) return 0 ;
  73. return frag[m] * rev_frag[m - k] % M * rev_frag[k] % M ;
  74. }
  75. ll dp[20][201] ;
  76. ll dp_len(ll len ) {
  77. memset(dp , 0 , sizeof dp ) ;
  78. dp[0][len] = 1 ;
  79. FOR(i , 0 , 9 ) FOR(j , 0 , len ) { // j cho con bao nhieu so
  80. if(j < arr[i] ) continue ;
  81. ll conlai = j ;
  82. FOR(k , arr[i] , conlai ) {
  83. if(i == 0 ) dp[i + 1 ][j - k ] = add(dp[i + 1 ][j-k] , mul(dp[i][j] , C(k , j - 1 )) ) ;
  84. else dp[i + 1 ][j - k ] = add(dp[i + 1 ][j-k] , mul(dp[i][j] , C(k , j )) ) ;
  85. }
  86.  
  87. }
  88. return dp[10][0] ;
  89. }
  90. void solve() {
  91. ll ans = 0 ;
  92. FOR(i , 0 , n ) ans = add(ans , dp_len(i )) ;
  93. cout << ans ;
  94. }
  95.  
  96. __ROOT__ {
  97. // freopen(NAME".inp" , "r" , stdin);
  98. // freopen(NAME".out" , "w", stdout) ;
  99. fast;
  100. int t = 1; // cin >> t ;
  101. while(t--) {
  102. init();
  103. solve();
  104. }
  105. return (0&0);
  106. }
  107.  
  108.  
  109.  
  110.  
Success #stdin #stdout 0.01s 5288KB
stdin
Standard input is empty
stdout
Standard output is empty