Advertisement
Guest User

Untitled

a guest
Dec 15th, 2012
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.98 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. #include<algorithm>
  5. #include<vector>
  6. #include<string>
  7. #include<set>
  8. #include<memory.h>
  9. #include<map>
  10. #include<assert.h>
  11. #include<time.h>
  12.  
  13. const int N_ = 3005;
  14. const int MOD = 1000000007;
  15. typedef long long lld;
  16. int N;
  17. char *A[N_];
  18. char D[N_][N_];
  19. lld fac[N_] = {1,};
  20.  
  21. bool cmp(const char*a, const char*b){
  22.     return strcmp(a, b) < 0;
  23. }
  24.  
  25. lld GetResult(int left, int right, int depth){
  26.     int i, cnt = 0, last_right = left - 1; lld ret = 1;
  27.  
  28.     for(i = left; i <= right; i++){
  29.         if(i == right || A[i][depth] != A[i+1][depth]){
  30.             if(A[i][depth] != 0) ret = (ret * GetResult(last_right + 1, i, depth + 1)) % MOD;
  31.             ++cnt; last_right = i;
  32.         }
  33.     }
  34.  
  35.     ret = (ret * fac[cnt]) % MOD;
  36.     return ret;
  37. }
  38.  
  39. int main(){
  40.     int i, j;
  41.  
  42.     scanf("%d",&N);
  43.     for(i = 1; i <= N; i++){
  44.         scanf("%s",D[i]); A[i] = D[i];
  45.         fac[i] = (fac[i-1] * i) % MOD;
  46.     }
  47.  
  48.     std::sort(A+1, A+N+1, cmp);
  49.  
  50.     printf("%lld\n",GetResult(1, N, 0));
  51.     return 0;
  52. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement