#include <stdio.h>
#define MAX 1000
typedef struct data
{
int num;
int nextcur;
int precur;
}Data;
void DSL_init(Data * DSL)//初始化双向静态链表
{
int i;
for(i=1;i<MAX-1;i++)
{
DSL[i].num=i;
DSL[i].nextcur=i+1;
DSL[i].precur=i-1;
}
DSL[MAX-1].nextcur=0;
DSL[MAX-1].precur=MAX-2;
DSL[0].nextcur=1;
DSL[0].precur=MAX-1;
return ;
}
int malloc_DSL(Data *DSL)//动态分配存储空间
{
int i;
i=DSL[0].nextcur;
if(DSL[0].nextcur)DSL[0].nextcur=DSL[i].nextcur;
return i;
}
int CreatDSL(Data *DSL,int n)//创建要使用的静态链表
{
int head,i,m,r;
head=malloc_DSL(DSL);
DSL[head].num=1;
r=head;
for(i=2;i<=n;i++)
{
m=malloc_DSL(DSL);
DSL[m].num=i;
DSL[r].nextcur=m;
DSL[m].precur=r;
r=m;
}
DSL[r].nextcur=head;
DSL[head].precur=r;
return head;
}
int Find_k(Data *DSL, int head, int k)
{
int i=head;
while(DSL[i].num!=k)
{
i=DSL[i].nextcur;
}
return i;
}
void free_DSL(Data *DSL, int r)
{
DSL[r].nextcur=DSL[0].nextcur;
DSL[r].precur=0;
DSL[DSL[0].nextcur].precur=r;
DSL[0].nextcur=r;
}
void Del_DSL_elem(Data *DSL,int * one1, int * one2,int m,int * e1,int * e2)
{
int s,r,i;
r=*one1;
s=*one2;
for(i=2;i<=m;i++)
{
r=DSL[r].nextcur;
s=DSL[s].precur;
}
DSL[DSL[r].precur].nextcur=DSL[r].nextcur;
DSL[DSL[s].nextcur].precur=DSL[s].precur;
//free_DSL(DSL,r);
//free_DSL(DSL,s);
*e1=DSL[r].num;
*e2=DSL[s].num;
*one1=DSL[r].nextcur;
*one2=DSL[s].precur;
}
void main()
{
int n,k,m,head;
Data DSL[MAX];
DSL_init(DSL);
scanf("%d,%d,%d",&n,&k,&m);
if(n==0||m==0||k==0)
printf("n,m,k must bigger than 0.");
else if(k>n)
printf("k should not bigger than n.");
head=CreatDSL(DSL,n);
int one1,one2;
one1=one2=Find_k(DSL,head,k);
int e1,e2;
while(n>0)
{
Del_DSL_elem(DSL,&one1,&one2,m,&e1,&e2);
if(e1!=e2)
{
printf("%d-%d,",e1,e2);
n=n-2;
}
else
{
printf("%d,",e1);
n=n-1;
}
}
printf("\n");
}
#define MAX 1000
typedef struct data
{
int num;
int nextcur;
int precur;
}Data;
void DSL_init(Data * DSL)//初始化双向静态链表
{
int i;
for(i=1;i<MAX-1;i++)
{
DSL[i].num=i;
DSL[i].nextcur=i+1;
DSL[i].precur=i-1;
}
DSL[MAX-1].nextcur=0;
DSL[MAX-1].precur=MAX-2;
DSL[0].nextcur=1;
DSL[0].precur=MAX-1;
return ;
}
int malloc_DSL(Data *DSL)//动态分配存储空间
{
int i;
i=DSL[0].nextcur;
if(DSL[0].nextcur)DSL[0].nextcur=DSL[i].nextcur;
return i;
}
int CreatDSL(Data *DSL,int n)//创建要使用的静态链表
{
int head,i,m,r;
head=malloc_DSL(DSL);
DSL[head].num=1;
r=head;
for(i=2;i<=n;i++)
{
m=malloc_DSL(DSL);
DSL[m].num=i;
DSL[r].nextcur=m;
DSL[m].precur=r;
r=m;
}
DSL[r].nextcur=head;
DSL[head].precur=r;
return head;
}
int Find_k(Data *DSL, int head, int k)
{
int i=head;
while(DSL[i].num!=k)
{
i=DSL[i].nextcur;
}
return i;
}
void free_DSL(Data *DSL, int r)
{
DSL[r].nextcur=DSL[0].nextcur;
DSL[r].precur=0;
DSL[DSL[0].nextcur].precur=r;
DSL[0].nextcur=r;
}
void Del_DSL_elem(Data *DSL,int * one1, int * one2,int m,int * e1,int * e2)
{
int s,r,i;
r=*one1;
s=*one2;
for(i=2;i<=m;i++)
{
r=DSL[r].nextcur;
s=DSL[s].precur;
}
DSL[DSL[r].precur].nextcur=DSL[r].nextcur;
DSL[DSL[s].nextcur].precur=DSL[s].precur;
//free_DSL(DSL,r);
//free_DSL(DSL,s);
*e1=DSL[r].num;
*e2=DSL[s].num;
*one1=DSL[r].nextcur;
*one2=DSL[s].precur;
}
void main()
{
int n,k,m,head;
Data DSL[MAX];
DSL_init(DSL);
scanf("%d,%d,%d",&n,&k,&m);
if(n==0||m==0||k==0)
printf("n,m,k must bigger than 0.");
else if(k>n)
printf("k should not bigger than n.");
head=CreatDSL(DSL,n);
int one1,one2;
one1=one2=Find_k(DSL,head,k);
int e1,e2;
while(n>0)
{
Del_DSL_elem(DSL,&one1,&one2,m,&e1,&e2);
if(e1!=e2)
{
printf("%d-%d,",e1,e2);
n=n-2;
}
else
{
printf("%d,",e1);
n=n-1;
}
}
printf("\n");
}