#include <iostream> #include <cstring> using namespace std; const int maxn=100; struct lnum{ int digit[maxn]; int length; lnum(); lnum(int x); lnum(string x); bool operator<=( lnum &b); lnum operator%( lnum &b); lnum operator-( lnum &b); bool operator==(lnum &b); }; lnum::lnum(string x){ length=0; memset(digit,0,sizeof(digit)); for(int i=x.length()-1;i>=0;i--){ digit[length++]=x[i]-'0'; } } bool lnum::operator==(lnum &b){ if(length!=b.length) return false; int i=length-1; while(digit[i]==b.digit[i] && i>0) i--; return digit[i]==b.digit[i]; } lnum::lnum(int x){ length=0; memset(digit,0,sizeof(digit)); while(x>0){ digit[length++]=x%10; x/=10; } } lnum lnum::operator-(lnum &b){ lnum answer; int carry=0; for(int i=0;i<length;i++){ int cu=digit[i]-b.digit[i]-carry; if(cu<0){ carry=1; cu+=10; } answer.digit[i]=cu; answer.length++; } while(answer.digit[answer.length-1]==0 && answer.length>1) answer.length--; return answer; } lnum::lnum(){ length=0; memset(digit,0,sizeof(digit)); } bool lnum::operator<=( lnum &b){ if(length<b.length) return true; else if(length>b.length) return false; else { int i=length-1; while(digit[i]==b.digit[i] && i>0) i--; return digit[i]<=b.digit[i]; } } lnum lnum::operator%( lnum &b){ lnum rem; for(int i=length-1;i>=0;i--){ if(!(rem.length==1 && rem.digit[0]==0)){ for(int j=rem.length-1;j>=0;j--){ rem.digit[j+1]=rem.digit[j]; } rem.length++; } rem.digit[0]=digit[i]; while(b<=rem){ rem=rem-b; } } return rem; } void outp(lnum x){ for(int i=x.length-1;i>=0;i--) cout<<x.digit [i]; cout<<endl; } int main() { string n; while(cin>>n){ if(n.length()==2 && (n=="-1")) { continue;} lnum c(n); int flag=0; for(int i=2;i<10;i++){ lnum k(i); lnum kk=c%k; if(kk.length==1 && kk.digit[0]==0) {cout<<i<<' '; flag=1;} } if(flag==0) cout<<"none"<<endl; else cout<<endl; } }