#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m,vis[666],tmp[16],lo[16],ans[16],cnt[666];
int cal()
{
int c[16];
c[m]=0;
for(int i=0;i<m;i++)
ans[i]=tmp[lo[i]];
for(int i=2;i<=m;i++)
{
memset(c,0,sizeof(c));
for(int j=0;j<m;j++)
{
c[j+1]=(ans[j]*i+c[j])/n;
c[j]=(ans[j]*i+c[j])%n;
}
if(c[m])
return 0;
for(int j=0;j<m;j++)
vis[c[j]]++;
int flag=0;
for(int j=0;j<m;j++)
if(vis[c[j]]!=cnt[c[j]])
flag=1;
for(int j=0;j<m;j++)
vis[c[j]]--;
if(flag)
return 0;
}
return 1;
}
int dfs(int x)
{
if(x==m)
return cal();
for(int i=x;i<m;i++)
{
swap(lo[i],lo[x]);
if(dfs(x+1))
return 1;
swap(lo[i],lo[x]);
}
return 0;
}
int ok(int x)
{
int t=0;
memset(vis,0,sizeof(vis));
memset(cnt,0,sizeof(cnt));
for(int i=0;i<m;i++)
{
t=(t+x)%n;
tmp[i]=t;
lo[i]=i;
}
for(int i=0;i<m;i++)
cnt[tmp[i]]++;
return dfs(0);
}
int main()
{
while(~scanf("%d%d",&m,&n)&&(n+m))
{
int flag=0;
for(int i=1;i<n;i++)
if(ok(i))
{
flag=1;
break;
}
if(flag)
{
for(int i=m-1;i>0;i--)
printf("%d ",ans[i]);
printf("%d\n",ans[0]);
}
else
printf("Not found.\n");
}
}
uva 10825
最新推荐文章于 2019-02-28 22:08:49 发布