fork download
  1. #include <iostream>
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4. #define MOD 1000000007
  5. long long int dp[101][26]={0};
  6.  
  7. //long long int dp[2][100001]={0};
  8. int main()
  9. { ios::sync_with_stdio(false);
  10. int t;
  11. cin >> t;
  12. while(t--){
  13. string s;
  14. cin >> s;
  15. if(s.size()==1){
  16. cout << "0" << endl;
  17. continue;
  18. }
  19.  
  20. for(int i=0;i<26;++i){
  21. char a='a'+i;
  22.  
  23. if(s[1]>=a){
  24. int b=s[1]-a;
  25. int c=s[0]+b;
  26. cout << c << endl;
  27. if(c<='z'){
  28. dp[2][i]=1;
  29. }
  30. else
  31. dp[2][i]=0;
  32. }
  33. else{
  34. int b=a-s[1];
  35. int c=s[0]-b;
  36. cout << c << endl;
  37. if(c>='a')
  38. dp[2][i]=1;
  39. else
  40. dp[2][i]=0;
  41. }
  42. }
  43. for(int i=3;i<=s.size();++i){long long int g=0;
  44. for(int j=0;j<26;++j){
  45. g+=dp[i-1][j];
  46. g=g%MOD;
  47. }
  48. long long int f=g;
  49. for(int j=s[i-1]-'a';j<='z'-'a';++j){
  50. dp[i][j]=g;
  51. g=(g-dp[i-1][j-(s[i-1]-'a')]+MOD)%MOD;
  52. }
  53.  
  54. for(int j=s[i-1]-'a'-1;j>=0;--j){
  55. f=(f-dp[i-1][26+(j-s[i-1]+'a')]+MOD)%MOD;
  56. dp[i][j]=f;
  57. }
  58. }
  59. long long int ans=0;
  60. for(int i=0;i<26;++i){
  61. ans+=dp[s.size()][i];
  62. ans=ans%MOD;
  63. }
  64. cout << (ans-1+MOD)%MOD << endl;
  65. for(int i=2;i<=100;++i){
  66. for(int j=0;j<26;++j)
  67. dp[i][j]=0;
  68. }
  69. }
  70. return 0;
  71.  
  72.  
  73.  
  74.  
  75.  
  76. }
  77.  
Success #stdin #stdout 0s 3300KB
stdin
1
mnmnmnmnmnmnmnmnmnmnmnmnmnmnmnmnmnmnmnmnmnmnmnmnmnmnmnmnmnmnmnmnmnmnmnmnmnmnmnmnmnmnmnmnmnmnmnmnmnmn
stdout
122
121
120
119
118
117
116
115
114
113
112
111
110
109
108
107
106
105
104
103
102
101
100
99
98
97
818892893