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 }