char digit; // 当前放置的数字为多少
}info,que[10005];
inline bool ok(int x,int &ans)
{
if(que[x].mod==0)
{
ans=x;
return true;
}
return false;
}
void print(int x)
{
if(que[x].f!=-1)
print(que[x].f);
printf("%d",que[x].digit);
}
void bfs()
{
int ans,front=0,tail=0;
bool finish=false;
for(int i=1;i<10;++i)
{
if(!hav[i])
{// 如果这个数码没有被限制
que[tail].mod=i % N;//把所有的包括输入m项例如7、8、9、17、18、19.。。。都排除了~~~~
if(vis[que[tail].mod])
continue;// 判定这个余数是否已经走过
vis[que[tail].mod]=1;
que[tail].digit=i;//存放某一个满足掉的位置的数值
que[tail].f=-1;// -1是一个特殊的标识,表示到了根节点
// 把一个合法的初始化根节点加入到队列中去
if(ok(tail,ans))
{
finish=true;
break;
}
++tail;
}
}
while(!finish&&tail!=front)
{
info=que[front++];// 取出队首元素
for(int i=0;i<10;++i)
{
if(!hav[i])
{
//第二次执行该语句,将队列中的数据不断扩大,最后找到能够MOD n的非输入数据的最小数值 que[tail].mod=(info.mod * 10 + i) % N;
if(vis[que[tail].mod])
continue;
vis[que[tail].mod]=1;
que[tail].digit=i;
que[tail].f=front-1;// 保留上一个状态的编号
if(ok(tail,ans))
{
finish=true;
break;
}
++tail;
}
// tail++;
}
}
if(finish)
{
print(ans);
puts("");
}
else
cout<<"-1"<
}
int main()
{
int c,ca=0;
while(cin>>N>>M)
{
memset(hav,0,sizeof(hav));
memset(vis,0,sizeof(vis));
for(int i=0;i
cin>>c;
hav[c]=1;// 标志为1的数字不能够使用
}
printf("Case %d: ",++ca);
bfs();
}
return 0;
}