// http: // acm.hnu.cn: 8080 / online / discuss / hostandfollow.jsp?hostid = 97 & problemid = 10030
// pow函数比较不稳定,可以用自定义的pown函数进行计算; 
// http: // acm.pku.edu.cn / JudgeOnline / problem?id = 3199
#include
< stdio.h >
#include
< math.h >
__int64 pown(__int64 base,__int64 n)
{
 
if (n == 0 )return  1 ;
 
if (n == 1 )return base;
 
if (n% 2 == 0 )return pown(base * base,n / 2 );
 
else  return pown(base * base,n / 2 ) * base;
}
int  main()
{
 
int  N,D;
 
int  base = 1000000000 ;
 
double  maxn = pow( 2.0 , 62.5 );
 
while (scanf( " %d%d " , & N, & D) && (N! = 0 ||D! = 0 )){
       
double  max = pow(N,D);
       
if (max <= maxn){
          printf(
" %I64d\n " ,pown(N,D));
          continue;
       }
       __int64 a1 
=  pown(N, D  /   2 );
        __int64 a2 
=  pown(N, D  -  D  /   2 );
        __int64 a1h 
=  a1  /  base, a1l  =  a1 % base;
        __int64 a2h 
=  a2  /  base, a2l  =  a2 % base;
        __int64 low 
=  a1l  *  a2l;
        __int64 hih 
=  a1h  *  a2h  *  base  +  a1h  *  a2l  +  a2h  *  a1l  +  low  /  base; 
        printf(
" %I64d " , hih);
        printf(
" %09I64d\n " , low % base); // 09格式化,9位不足左边用0补充上; 
 }
 return 
0 ;
}