1 #include<iostream>    
 2 #include<string>    
 3 #include<algorithm>    
 4 #include<cstdio>    
 5 #include<cstring>    
 6 #include<cstdlib>
 7 #include<cmath>
 8 #include<bitset>
 9 using namespace std;  
10 typedef long long s64;
11 
12 const int ONE = 4005;
13 const int MOD = 10007;
14 
15 int n;
16 int a[ONE];
17 char ch[ONE];
18 int f[ONE][ONE];
19 int Ans;
20 
21 int get()
22 {    
23         int res=1,Q=1;char c;    
24         while( (c=getchar())<48 || c>57 ) 
25         if(c==‘-‘)Q=-1; 
26         res=c-48;     
27         while( (c=getchar())>=48 && c<=57 )    
28         res=res*10+c-48;    
29         return res*Q;
30 }
31 
32 int Quickpow(int a, int b)
33 {
34         int res = 1;
35         while(b)
36         {
37             if(b & 1) res = (s64)res * a % MOD;
38             a = (s64)a * a % MOD;
39             b >>= 1;
40         }
41         return res;
42 }
43 
44 int main()
45 {
46         scanf("%s", ch + 1);
47         n = strlen(ch + 1);
48     
49         for(int i=1; i<=n; i++)
50             a[i] = ‘Z‘ - ch[i];
51         
52         Ans = 1;
53         for(int i=1; i<=n; i++)
54             Ans = (s64)Ans * (a[i]+1) % MOD;
55         printf("%d\n", Ans);    Ans = 1;
56         
57         f[0][0] = 1;
58         for(int i=1; i<=n; i++)
59         {
60             f[i][0] = 1;
61             for(int j=1; j<=i; j++)
62                 f[i][j] = (f[i-1][j] + f[i-1][j-1] * a[i] % (MOD - 1)) % (MOD - 1);    
63         }
64         
65         for(int k=1; k<=n; k++)
66             Ans = (s64)Ans * Quickpow(k, f[n][k]) % MOD;
67             
68         printf("%d", Ans);
69 }