//poj 1845
#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=1e5+5;
const int MD=9901;
typedef long long LL;
int p[maxn],a[maxn];
void ex_gcd(LL n,LL k,LL &x,LL &y)
{
if(k==0)
{
x=1;
y=0;
return;
}
ex_gcd(k,n%k,x,y);
LL t=x;
x=y;
y=t-n/k*y;
}
LL pow_mod(LL n,LL k)
{
LL res=1;
while(k)
{
if(k&1) res=res*n%MD;
k>>=1;
n=n*n%MD;
}
return res;
}
int main()
{
int n,k;
while(scanf("%d%d",&n,&k)==2)
{
if(n==0) {
cout<<"0"<<endl;
continue;
}
if(n==1||k==0) {
cout<<"1"<<endl;
continue;
}
int cnt=0;
for(int i=2;i*i<=n;i++)
{
if(n==1) break;
if(n%i==0) {
p[cnt]=i;
a[cnt]=0;
while(n%i==0) {
a[cnt]++;
n/=i;
}
cnt++;
}
}
if(n!=1) {
p[cnt]=n;
a[cnt]=1;
cnt++;
}
//利用因子求和公式
for(int i=0;i<cnt;i++)
a[i]*=k;
//得到n^k的唯一分解式
LL sum=1;
//等比数列求和公式
for(int i=0;i<cnt;i++)
{
if(p[i]%MD==1) { //影响到求逆元,只有当两个数互质时,才能求解逆元
sum=sum*(a[i]+1)%MD;
continue;
}
sum=sum*((pow_mod(p[i],a[i]+1)-1+MD)%MD)%MD; //分子
LL x,y;
ex_gcd(p[i]-1,MD,x,y);
x=(x%MD+MD)%MD; //无论x是正还是负数都可以写成这种形式
sum=sum*x%MD; //分母
}
cout<<sum%MD<<endl;
}
return 0;
}
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long LL;
const LL MD=29;
void ex_gcd(LL a,LL b,LL &x,LL &y)
{
if(b==0) {
x=1;
y=0;
return;
}
ex_gcd(b,a%b,x,y);
LL t=x;
x=y;
y=t-a/b*y;
}
LL pow_mod(LL n,LL k)
{
LL res=1;
while(k)
{
if(k&1) res=res*n%MD;
k>>=1;
n=n*n%MD;
}
return res;
}
int main()
{
LL p[5],a[5],b[5];
int cnt=0,n=2004;
for(int i=2;i*i<=2004;i++)
{
if(n==1) break;
if(n%i==0) {
p[cnt]=i;
a[cnt]=0;
while(n%i==0) {
n/=i;
a[cnt]++;
}
cnt++;
}
}
if(n!=1) {
p[cnt]=n;
a[cnt]=1;
cnt++;
}
//for(int i=0;i<cnt;i++)
// cout<<p[i]<<" "<<a[i]<<endl;
int x;
while(scanf("%d",&x)==1&&x)
{
//得到唯一分解式
memcpy(b,a,sizeof(a));
for(int i=0;i<cnt;i++)
b[i]*=x;
LL sum=1;
for(int i=0;i<cnt;i++)
{
sum=sum*((pow_mod(p[i],b[i]+1)-1+MD)%MD)%MD;
//cout<<sum<<endl;
LL x1,y;
ex_gcd(p[i]-1,MD,x1,y);
//cout<<x1<<endl;
x1=(x1%MD+MD)%MD;
//cout<<x1<<endl;
sum=sum*x1%MD;
// cout<<sum<<endl;
}
cout<<sum%MD<<endl;
}
return 0;
}