//对于任意的整数n,必然存在一个由不多于两个的数来组成的一个倍数。
。。。所以最多有2个数字
先判断1个数字的情况没有再判断2个数字的情况
在s串上每次添加1个数判断是否被n整除
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <string>
#include <iostream>
#include <algorithm>
#include <sstream>
#include <math.h>
using namespace std;
#include <queue>
#include <stack>
#include <vector>
#include <deque>
#include <set>
#include <map>
#define cler(arr, val) memset(arr, val, sizeof(arr))
#define IN freopen ("in.txt" , "r" , stdin);
#define OUT freopen ("out.txt" , "w" , stdout);
typedef long long LL;
const int MAXN = 66666;//点数的最大值
const int MAXM = 20006;//边数的最大值
const int INF = 1101521204;
const int mod = 10000007;
int num[MAXN],ans,n;
int pre[MAXN],re[MAXN],out[MAXN];
string s;
void print(int x)
{
if(x!=-1)
print(pre[x]);
else return ;
s+=(out[x]+'0');
}
string bfs(int x,int y)
{
s="";
int tol=0;
cler(num,0);
if(x!=0)
{
pre[tol]=-1;
out[tol]=x;
num[x%n]=1;
re[tol++]=x%n;
}
if(!num[y%n])
{
pre[tol]=-1;
out[tol]=y;
num[y%n]=1;
re[tol++]=y%n;
}
for(int i=0; i<tol; i++)
{
if(re[i]==0)
{
print(i);
return s;
}
else
{
int temp=re[i]*10+x;
if(!num[temp%n])
{
pre[tol]=i;
out[tol]=x;
num[temp%n]=1;
re[tol++]=temp%n;
}
temp=re[i]*10+y;
if(!num[temp%n])
{
pre[tol]=i;
out[tol]=y;
num[temp%n]=1;
re[tol++]=temp%n;
}
}
}
return s;
}
bool cmp(string temp,string ans)
{
if(temp.size()!=ans.size())
{
return temp.size()<ans.size();
}
return temp<ans;
}
int main()
{
//IN;
while(scanf("%d",&n),n)
{
string ans="",temp;
for(int i=1; i<=9; i++)
{
temp=bfs(i,i);
//cout<<temp<<endl;
if(temp.size()==0) continue;
if(ans.size()==0||cmp(temp,ans))
ans=temp;
}
// cout<<ans<<endl;
if(ans.size()==0)
{
for(int i=0; i<=9; i++)
{
for(int j=i+1; j<=9; j++)
{
temp=bfs(i,j);
// cout<<temp<<endl;
if(temp.size()==0) continue;
if(ans.size()==0||cmp(temp,ans))
ans=temp;
// cout<<ans<<i<<j<<endl;
}
}
}
cout<<ans<<endl;
}
}