#include<stdio.h>
#include<string.h>
#include<math.h>
#define MAXLEN 801
char str[MAXLEN];
long long n,e;
int len;
long long Mod_solution(long long a, long long b)
{
long long result= 1;
if(b==0) return 1;
if(b==1) return a%n;
result=Mod_solution(a,b>>1);
result=result*result%n;
if (b&0x1) result=result*a%n;
return result;
}
void Pre_Operate()
{
int k1,j;
for(k1=j=0;str[j]!='\0';j++)
{
if('a'<=str[j]&&str[j]<='z') str[k1++]=str[j]-32;
else if('A'<=str[j]&&str[j]<='Z') str[k1++]=str[j];
}
str[k1]='\0';
}
long long int Encryption(int t)
{
int i;
long long sum=0,fsum=1,result=0,k=1;
for(i=t;i>=t-3;i--)
{
sum+=(str[i]-'A')*k;
k*=100;
}
//while(e1>0){ fsum*=sum; fsum%=n; e1--;}
fsum=Mod_solution(sum,e);
return fsum;
}
void print(long long s)
{
int i=0,j;
long long t=s;
while(t!=0)
{
i++;
t/=10;
}
for(j
=0;j
<8-i
;j
++) printf("0"); }
int main()
{
int r,d,i,s=3,l;
long long result;
Pre_Operate();
l=len;
while(l>=4)
{
result=Encryption(s);
s+=4;
l-=4;
print(result);
}
if(l>0)
{
for(i=len;i<=(len/4+1)*4-1;i++) str[i]='Z';
result=Encryption((len/4+1)*4-1);
print(result);
}
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RyaW5nLmg+CiNpbmNsdWRlPG1hdGguaD4KI2RlZmluZSBNQVhMRU4gODAxICAKY2hhciBzdHJbTUFYTEVOXTsgCmxvbmcgbG9uZyBuLGU7CmludCBsZW47Cgpsb25nIGxvbmcgTW9kX3NvbHV0aW9uKGxvbmcgbG9uZyBhLCBsb25nIGxvbmcgYikgICAgICAgIAp7ICAgICAgCiAgICBsb25nIGxvbmcgcmVzdWx0PSAxOyAgCiAgICBpZihiPT0wKSAgcmV0dXJuIDE7ICAgIAogICAgaWYoYj09MSkgCXJldHVybiBhJW47ICAgCiAgICByZXN1bHQ9TW9kX3NvbHV0aW9uKGEsYj4+MSk7ICAKICAgIHJlc3VsdD1yZXN1bHQqcmVzdWx0JW47ICAgCiAgICBpZiAoYiYweDEpIHJlc3VsdD1yZXN1bHQqYSVuOyAgIAogICAgcmV0dXJuIHJlc3VsdDsgIAp9CgoKdm9pZCBQcmVfT3BlcmF0ZSgpCnsKCWludCBrMSxqOwogICAgZm9yKGsxPWo9MDtzdHJbal0hPSdcMCc7aisrKQogICAgewogICAgICAgIGlmKCdhJzw9c3RyW2pdJiZzdHJbal08PSd6Jykgc3RyW2sxKytdPXN0cltqXS0zMjsKICAgICAgICBlbHNlIGlmKCdBJzw9c3RyW2pdJiZzdHJbal08PSdaJykgc3RyW2sxKytdPXN0cltqXTsKICAgIH0KICAgIHN0cltrMV09J1wwJzsKCQp9Cgpsb25nIGxvbmcgaW50IEVuY3J5cHRpb24oaW50IHQpCnsKCWludCBpOwoJbG9uZyBsb25nIHN1bT0wLGZzdW09MSxyZXN1bHQ9MCxrPTE7Cglmb3IoaT10O2k+PXQtMztpLS0pCgl7CgkJc3VtKz0oc3RyW2ldLSdBJykqazsKCQlrKj0xMDA7Cgl9CgkvL3doaWxlKGUxPjApeyBmc3VtKj1zdW07IGZzdW0lPW47ICBlMS0tO30KCWZzdW09TW9kX3NvbHV0aW9uKHN1bSxlKTsKCXJldHVybiBmc3VtOwp9Cgp2b2lkIHByaW50KGxvbmcgbG9uZyBzKQp7CglpbnQgaT0wLGo7Cglsb25nIGxvbmcgdD1zOwoJd2hpbGUodCE9MCkKCXsKCQlpKys7CgkJdC89MTA7Cgl9Cglmb3Ioaj0wO2o8OC1pO2orKykgcHJpbnRmKCIwIik7CglwcmludGYoIiVsbGQiLHMpOwogfSAKCmludCBtYWluKCkKewoJaW50IHIsZCxpLHM9MyxsOwoJbG9uZyBsb25nIHJlc3VsdDsKCXNjYW5mKCIlZCAlZFxuIiwmbiwmZSk7CiAgICBnZXRzKHN0cik7CglQcmVfT3BlcmF0ZSgpOyAKCWxlbj1zdHJsZW4oc3RyKTsKICAgbD1sZW47CiAgIHdoaWxlKGw+PTQpCiAgIHsgICAgCiAgICByZXN1bHQ9RW5jcnlwdGlvbihzKTsKICAgIHMrPTQ7CiAgICBsLT00OwogICAgcHJpbnQocmVzdWx0KTsKICAgfQogICBpZihsPjApIAogICB7CiAgIAlmb3IoaT1sZW47aTw9KGxlbi80KzEpKjQtMTtpKyspIHN0cltpXT0nWic7IAoJcmVzdWx0PUVuY3J5cHRpb24oKGxlbi80KzEpKjQtMSk7CiAgIAlwcmludChyZXN1bHQpOwogICB9Cn0=