#include<iostream>
#include<stdlib.h>
using namespace std;
const int defaultSize = 10;
class SeqList {
protected:
int *data;
int maxSize; //表最大可容纳项数
int last; //当前表大小
public:
SeqList(int sz = defaultSize);
~SeqList();
int Length() const; //计算表长度
bool getData(int i,int &x) const; //取第i歌表项的值,存放在x中
bool Insert(int i,int &x); //插入x在第i歌表项之后
bool Remove(int i,int &x); //删除第i歌表项,用x返回其值
bool isEmpty(); //判断表是否空
void output(); // 输出顺序表
};
SeqList::SeqList(int sz)
{
if (sz>0) {
maxSize = sz;
last = -1;
data = new int[maxSize];
if (data == NULL)
exit(1);
}
}
SeqList::~SeqList()
{
delete []data;
}
int SeqList::Length() const
{
return last+1;
}
bool SeqList::getData(int i,int &x) const
{
if (i>0&&i<=last+1)
{
x=data[i-1];
return true;
}
else return false;
}
bool SeqList::Insert(int i,int &x)
{
if (last == maxSize-1)
return false;
if (i<0||i>last+1)
return false;
int j;
for (j=last;j>=i;j--)
data[j+1] = data[j];
data[i] = x;
last++;
return true;
}
bool SeqList::Remove(int i,int &x)
{
if (last==-1)
return false;
if (i<1||i>last+1)
return false;
x = data[i-1];
int j;
for (j=i;j<=last;j++)
data[j-1] = data[j];
last--;
return true;
}
bool SeqList::isEmpty()
{
return (last == -1)?true:false;
}
void SeqList::output()
{
int i;
for (i=0;i<=last;i++)
cout << data[i] << " ";
cout << endl;
}
void Josephus(SeqList &l,int m)
{
int n=l.Length(),i,x,cnt=0;
while(l.Length()!=0)
{
for(i=1;i<=n;i++)//n为还剩余的人数
{
cnt++;//一共数过的人
l.getData(i,x);//把这个人的数据放到x里面
if(cnt%m==0)//m,2m,3m时就踢除
{
printf("%d ",x);
l.Remove(i,x);
n--;
i--;
}
}
}
printf("\n");//write your code here
}
int main()
{
int n;//n个人
cin >> n;
int m; //数到第m人出局
cin >> m;
SeqList l;int i,x;
for(i=0;i<n;i++)
{
x=i+1;
l.Insert(i,x);
}
//write your code here
Josephus(l,m);
//printf("%d %d\n",n,m);
return 0;
}