#include <iostream>
#include <vector>
using namespace std;
int tree_size;
vector<int> tree;
void tree_add(int idx, int delta) {
    for (; idx <= tree_size; idx += idx & -idx) {
        tree[idx] += delta;
    }
}
int tree_query(int idx) {
    int sum = 0;
    for (; idx > 0; idx -= idx & -idx) {
        sum += tree[idx];
    }
    return sum;
}
int find_kth_free(int k) {
    int idx = 0;
    for (int i = 1 << 16; i > 0; i >>= 1) {
        if (idx + i <= tree_size && tree[idx + i] < k) {
            idx += i;
            k -= tree[idx];
        }
    }
    return idx + 1;
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int n;
    if (!(cin >> n)) return 0;
    tree_size = n;
    tree.assign(n + 1, 0);
    vector<int> result(n + 1);
    for (int i = 1; i <= n; i++) {
        tree_add(i, 1);
    }
    int current_free_rank = 0;

    for (int i = 1; i <= n; i++) {
        int free_slots_left = n - i + 1; 
        current_free_rank = (current_free_rank + i) % free_slots_left;

        int target_rank = current_free_rank + 1;
        int actual_pos = find_kth_free(target_rank);
        result[actual_pos] = i;
        tree_add(actual_pos, -1);
        current_free_rank = target_rank - 1;
    }
    for (int i = 1; i <= n; i++) {
        cout << result[i] << " ";
    }
    cout << "\n";

    return 0;
}