#include <cstdio>
#define Amax 65536
int n, vl;
int ai[Amax];
void citire()
{
scanf("%d", &n);
}
void update(int nod, int st, int dr, int a)
{
if (st == dr)
ai[nod] = vl;
else
{
int mij = (st + dr) / 2;
if (a <= mij)
update(nod*2, st, mij, a);
else
update(nod*2+1, mij+1, dr, a);
ai[nod] = ai[nod*2] + ai[nod*2+1];
}
}
int query1(int nod, int st, int dr, int a, int b)
{
if (a <= st && dr <= b)
return ai[nod];
else
{
int mij = (st + dr) / 2, ret = 0;
if (a <= mij)
ret += query1(nod*2, st, mij, a, b);
if (mij < b)
ret += query1(nod*2+1, mij+1, dr, a, b);
return ret;
}
}
int query2(int nod, int st, int dr, int pos)
{
if (st == dr)
return st;
else
{
int mij = (st + dr) / 2;
if (pos <= ai[nod*2])
return query2(nod*2, st, mij, pos);
else
return query2(nod*2+1, mij+1, dr, pos - ai[nod*2]);
}
}
void solve()
{
int i, pos = 1, inc, nr, p;
vl = 1;
for (i = 1; i <= n; ++i)
update(1, 1, n, i);
vl = 0;
for (i = 1; i <= n; ++i)
{
inc = i + query1(1, 1, n, 1, pos);
nr = n - i + 1;
inc %= nr;
if (inc == 0)
inc = nr;
p = query2(1, 1, n, inc);
pos = p;
printf("%d ", p);
update(1, 1, n, p);
}
printf("\n");
}
int main()
{
freopen("order.in", "r", stdin);
freopen("order.out", "w", stdout);
citire();
solve();
return 0;
}