Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define sc( x ) scanf( "%d" , &x )
- #define REP( i , n ) for( int i = 0 ; i < n ; ++i )
- #define clr( t , val ) memset( t , val , sizeof( t ) )
- #define pb push_back
- #define all( v ) v.begin() , v.end()
- #define SZ( v ) ((int)(v).size())
- #define mp make_pair
- #define fi first
- #define se second
- #define MOD 1000000007LL
- typedef pair< int , int > pii;
- typedef long long ll;
- typedef vector< int > vi;
- ll C[ 105 ][ 105 ];
- int F[ 15 ];
- ll TEN[ 105 ];
- bool used[ 105 ][ 15 ][ 15 ];
- ll memo[ 105 ][ 15 ][ 15 ];
- ll DP[ 105 ][ 15 ][ 15 ];
- ll dp( int L , int dig , int d ){
- if( L == 0 ) return 1;
- if( dig == 10 ) return 0;
- if( used[ L ][ dig ][ d ] ) return memo[ L ][ dig ][ d ];
- used[ L ][ dig ][ d ] = 1;
- ll &dev = memo[ L ][ dig ][ d ] = 0;
- for( int i = 0 ; i <= min( F[ dig ] - (dig == d) , L ) ; ++i ) dev = ( dev + C[ L ][ i ] * dp( L - i , dig + 1 , d ) )%MOD;
- return dev;
- }
- int main(){
- TEN[ 0 ] = 1;
- for( int i = 1 ; i <= 100 ; ++i ) TEN[ i ] = ( TEN[ i - 1 ] * 10 )%MOD;
- REP( i , 101 ) C[ i ][ i ] = C[ i ][ 0 ] = 1;
- for( int i = 2 ; i <= 100 ; ++i )
- for( int j = 1 ; j < i ; ++j ) C[ i ][ j ] = ( C[ i - 1 ][ j - 1 ] + C[ i - 1 ][ j ] )%MOD;
- int cases;
- cin >> cases;
- REP( tc , cases ){
- ll S = 0;
- for( int i = 1 ; i <= 9 ; ++i ) {
- cin >> F[ i ];
- S += F[ i ];
- }
- clr( used , 0 );
- ll ans = 0;
- for( int i = 1 ; i <= S ; ++i ){
- for( int j = 0 ; j < i ; ++j ){
- for( int d = 1 ; d <= 9 ; ++d )
- if( F[ d ] ){
- //clr( used , 0 );
- ll a = ( dp( i - 1 , 1 , d ) * TEN[ j ] )%MOD;
- ans = ( ans + a * (ll)d )%MOD;
- /*
- for( int L = 0 ; L <= S ; ++L ) DP[ L ][ 10 ] = 0;
- for( int dig = 1 ; dig <= 10 ; ++dig ) DP[ 0 ][ dig ] = 1;
- for( int L = 1 ; L <= i ; ++L )
- for( int dig = 9 ; dig >= 1 ; --dig ){
- DP[ L ][ dig ] = 0;
- for( int k = 0 ; k <= min( F[ dig ] , L ) ; ++k ) DP[ L ][ dig ] = ( DP[ L ][ dig ] + C[ L ][ k ] * DP[ L - k ][ dig + 1 ] )%MOD;
- }
- ll a = ( DP[ i - 1 ][ 1 ] * TEN[ j ] )%MOD;
- ans = ( ans + a * (ll)d )%MOD;
- */
- }
- }
- }
- cout << ans << '\n';
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement