#include<bits/stdc++.h>
using namespace std;
struct bign{
int d[1000];
int len;
bign(){
memset(d,0,sizeof(d));
len=0;
}
};
bign change(char str[]){ //将大数转换为bign型存储
bign a;
a.len=strlen(str);
for(int i=0;i<a.len;i++){ //交换高低位
a.d[i]=str[a.len-1-i]-'0'; // 交换高低位 常用代码,记住
}
return a;
}
bign divide(bign a,int b,int &r){ //表示a/b,r是余数
bign c; //c是商,位数先和被除数定义为一样
c.len=a.len;
//开始除
for(int i=a.len-1;i>=0;i--){
r=r*10+a.d[i]; //余数先和上一位遗留的余数组合
if(r<b){
c.d[i]=0; //不够除,该位为0
}
else{ //够除
c.d[i]=r/b; //商
r=r%b; //获得的新余数
}
}
while(c.d[c.len-1]==0 && c.len-1>=1){ //去掉高位0
c.len--; //去除最高位的0,同时至少保留一位最低位。
}
return c;
}
int main(){
char a[31];
while(scanf("%s",a)!=EOF){
if(strcmp(a, "-1") == 0){ // 使用strcmp函数比较字符串
break;
}
bign c=change(a); //字符串转变为大数存储
int count=0;
for(int k=2;k<=9;k++){
int r=0; //余数最开始置0
divide(c,k,r);
if(r==0){
printf("%d ",k);
count++;
}
}
if(count!=0){
cout<<endl;
}
if(count==0){
printf("none\n");
}
}
return 0;
}