#include <iostream>
auto *in = fopen("order.in", "r"), *out = fopen("order.out", "w") ;
const int maxn = 3e4 ;
int aint[1 + (maxn << 2)] ;
void build(int node, int left, int right) {
if (left == right) {
aint[node] = 1 ;
return ;
}
int mid = ((left + right) >> 1) ;
build(node << 1, left, mid) ;
build((node << 1) + 1, mid + 1, right) ;
aint[node] = aint[node << 1] + aint[(node << 1) + 1] ;
}
int query(int node, int left, int right, int position) {
aint[node] -- ;
if (left == right) {
return left ;
}
int mid = ((left + right) >> 1), copii(aint[node << 1]) ;
if (position <= copii) {
return query(node << 1, left, mid, position) ;
}
return query((node << 1) + 1, mid + 1, right, position - copii) ;
}
int main() {
int n ;
fscanf(in, "%d", &n) ;
build(1, 1, n) ;
int badLuck = 1, ans ;
for (int i = 1 ; i <= n ; ++ i) {
badLuck = (badLuck + i) % aint[1] ;
if (badLuck == 0) {
badLuck = aint[1] ;
}
ans = query(1, 1, n, badLuck--) ;
fprintf(out, "%d ", ans) ;
}
}