#include<stdio.h>
#include<string.h>
char str[1001];
int a[100],b[100];
bool isprime[33000];
void Make()
{
int i,j;
memset(isprime,true,sizeof(isprime));
isprime[0] = isprime[1] = false;
for (i=2;i<190;i++)
{
if(isprime[i])
{
for(j=i*i;j<33000;j+=i)
isprime[j]=false;
}
}
}
void print(int n)
{
int t=n/2+1;
bool flag=true;
while(n>1&&t>1)
{
int sum=0;
bool flag2=true;
while(n%t==0&&isprime[t])
{
sum++;
n=n/t;
flag2=false;
}
if(!flag2)
{
if(!flag) printf(" ");else flag=false;
printf("%d",t);
printf(" ");
printf("%d",sum);
}
t--;
}
if(n>1)
printf("%d %d",n,1);
}
int main()
{
Make();
while(gets(str))
{
int l=strlen(str);
if(l==1) break;
int con=0,con2=0,num=0,num2=0;
bool flag=true;
for(int i=0;i<l;i++)
{
if(str[i]==' '&&flag)
{
a[num]=con;
num++;
con=0;
flag=false;
}
else
if(str[i]==' '&&!flag)
{
b[num2]=con2;
num2++;
con2=0;
flag=true;
}
else
if(flag)
con=con*10+(str[i]-'0');
else
con2=con2*10+(str[i]-'0');
}
if(con2!=0) { b[num2]=con2;num2++;}
int sum=1;
for(int i=0;i<num;i++)
for(int j=0;j<b[i];j++)
sum*=a[i];
print(sum-1);
printf("/n");
}
return 0;
}