#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; 
}