#include <iostream>
#include <fstream>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;
#define NMAX 100001
#define VALMAX 100001
int aint[4*VALMAX];
static inline int f(int x, int y) {
return x+y;
}
void build(int nod, int st, int dr) {
if (st==dr) {
aint[nod] = 1;
return;
}
int mijl, sonst, sondr;
mijl = (st+dr)/2;
sonst = nod+1;
sondr = nod + 2*(mijl-st+1);
build(sonst, st, mijl);
build(sondr, mijl+1, dr);
aint[nod] = f(aint[sonst], aint[sondr]);
return;
}
void update(int nod, int st, int dr, int poz) {
if (st==dr) {
aint[nod]--;
return;
}
int mijl, sonst, sondr;
mijl = (st+dr)/2;
sonst = nod+1;
sondr = nod + 2*(mijl-st+1);
if (poz<=mijl) {
update(sonst, st, mijl, poz);
} else {
update(sondr, mijl+1, dr, poz);
}
aint[nod] = f(aint[sonst], aint[sondr]);
return;
}
int query(int nod, int st, int dr, int pas) {
if (st==dr) {
return st;
}
int mijl, sonst, sondr;
mijl = (st+dr)/2;
sonst = nod+1;
sondr = nod + 2*(mijl-st+1);
if (pas <= aint[sonst]) {
return query(sonst, st, mijl, pas);
}
return query(sondr, mijl+1, dr, pas-aint[sonst]);
}
int main() {
ifstream fin("order.in");
ofstream fout("order.out");
int n, i, idx, poz;
fin >> n;
build(0, 1, n);
poz = 1;
for (i=1; i<=n; i++) {
poz = (poz+i-1)%(n-i+1);
idx = query(0, 1, n, poz+1);
update(0, 1, n, idx);
fout << idx << ' ';
}
fin.close();
fout.close();
return 0;
}