fork(1) download
  1. #include<stdio.h>
  2. #include<string.h>
  3.  
  4. #define MOD 1000000007
  5. long long fact(long long x)
  6. {
  7. long long f=1;
  8. if(x==0)
  9. return 1;
  10. else
  11. {
  12. for(int i=1;i<=x;i++)
  13. //f=f*(i%MOD); //mod was used in a wrong way
  14. f=((f*i)%MOD); //always use it as shown here
  15. }
  16. return f%MOD;
  17. }
  18. long long square(long long x)
  19. {
  20. //return x*x; //mod was missing here
  21. return (x*x)%MOD;
  22. }
  23. long long power(long long base,long long expo)
  24. {
  25. if(base==0)
  26. return 0;
  27. if(expo==0)
  28. return 1;
  29. else
  30. {
  31. if(expo%2==0)
  32. return square(power(base,expo/2))%MOD;
  33. else
  34. return (base*power(base,expo-1))%MOD;
  35. }
  36. }
  37. int main()
  38. {
  39. int arr[26]={0};
  40. char ip[1000000];
  41. scanf("%s",ip);
  42. long long num,den=1;
  43. int len=strlen(ip);
  44. for(int i=0;i<len;i++)
  45. arr[ip[i]-'a']++;
  46. for(int i=0;i<26;i++)
  47. arr[i]/=2;
  48. num=fact(len/2);
  49.  
  50. for(int i=0;i<26;i++)
  51. {
  52. //den=den*(fact(arr[i])); //again mod was missing here
  53. den=(den*(fact(arr[i])))%MOD;
  54. }
  55. den=den%MOD;
  56. den=power(den,MOD-2);
  57. printf("%lld\n",((num%MOD)*(den%MOD))%MOD);
  58. //printf("%lld",fact((long long)5));
  59. }
Success #stdin #stdout 0s 3152KB
stdin
cdcdcdcdeeeef
stdout
90