Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std ;
- typedef long long ll ;
- ll N,M,K ;
- const ll mod = 1000000007LL ;
- ll ncr[300][55] ;
- ll calc[300][55][55] ;
- ll NCR( ll n , ll r )
- {
- if( n < r ) return 0 ;
- if( n == r ) return 1 ;
- if( r == 1 ) return n ;
- if( ncr[n][r] != -1 ) return ncr[n][r] ;
- ll ret = NCR(n-1,r-1) + NCR(n-1,r ) ;
- ret %= mod ;
- return ncr[n][r] = ret ;
- }
- ll CALC( ll u , ll un , ll tot )
- {
- if( u == 0 ) return (!un) ;
- if(calc[u][un][tot] != -1 ) return calc[u][un][tot] ;
- ll ret = 0 ;
- ret = (tot-un)*CALC(u-1,un,tot ) ;
- ret %= mod ;
- if( un > 0 )ret += un * CALC(u-1,un-1,tot ) ;
- ret %= mod ;
- return calc[u][un][tot] = ret ;
- }
- ll cs, T ;
- int main()
- {
- memset(ncr,-1,sizeof(ncr)) ;
- memset(calc,-1,sizeof(calc)) ;
- scanf("%lld", &T ) ;
- while(cs< T )
- {
- cs++ ;
- scanf("%lld %lld %lld",&N,&M,&K ) ;
- ll ans = 0 ;
- ll tot = ( N + 1 ) * ( M+1 );
- if( tot == 1 )
- {
- ans = K ;
- }
- else{
- ll x = tot / 2 + tot % 2 ;
- ll y = tot / 2 ;
- for( ll r = 1 ; r < K ; r++ )
- {
- ll tem = ( ((NCR(K,r)* r)%mod) * CALC(x-1,r-1,r ) )%mod ;
- for( ll rr = 1 ; rr <= K - r ; rr++ ){
- ll tem2 = ( (( NCR(K-r,rr) *rr) %mod)* CALC(y-1,rr-1,rr ) ) % mod ;
- tem2 = ( tem * tem2 ) % mod ;
- // printf(" x = %lld & y = %lld & r = %lld & rr = %lld & res = %lld\n", x,y,r,rr,tem2 ) ;
- //
- // printf("NCR(%lld,%lld) = %lld && CALC(%lld,%lld) = %lld\n",K, r , NCR(K,r), x , r , CALC(x-1,r-1,r )) ;
- // printf("NCR(%lld,%lld) = %lld && CALC(%lld,%lld) = %lld\n",K-r , rr ,NCR(K-r,rr),y , rr , CALC(y-1,rr-1,rr )) ;
- ans += tem2 ;
- ans %= mod ;
- }
- }
- }
- printf("Case %lld: %lld\n", cs , ans ) ;
- }
- return 0 ;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement