#include #include #include #include #include #include #include #include #include using namespace std; #define FOR(i,n) for (int i = 0; i < n; i++) #define abs(x) ((x)<0?(-(x)):(x)) #define REP(i,v) for (unsigned i = 0; i < v.size(); i++) #define RL(i,v) for (unsigned i = 0; i < v.length(); i++) typedef long long ll; const int MAX = 262144; int tree[MAX]; int read(int idx){ int sum = 0; while (idx > 0){ sum += tree[idx]; idx -= (idx & -idx); } return sum; } void update(int idx, int val){ while (idx <= 100000){ tree[idx] += val; idx += (idx & -idx); } } int query(int idx1, int idx2) { int ans = read(idx2); if (idx1 > 0) ans -= read(idx1 - 1); return ans; } void solve(void) { FILE* f = fopen("lbulbs.in", "rt"); FILE* fo = fopen("lbulbs.out", "wt"); int n, m; fscanf(f, "%d %d", &n, &m); static int ans[MAX]; int rem = n, off = 0; m--; for (int i = 0; i < n; i++) { int howMany = m % rem; rem--; int left = 1, right = n, where = 1; while (left <= right) { int mid = (left + right) / 2; if (mid - query(off + 1, off + mid) <= howMany) where = max(where, mid + 1), left = mid + 1; else right = mid - 1; } off = (off + where - 1) % n; update(off + 1, 1); update(off + n + 1, 1); ans[off] = i + 1; } for (int i = 0; i < n; i++) fprintf(fo, "%d%c", ans[i], i + 1 == n ? '\n' : ' '); fclose(f); fclose(fo); } int main(void) { solve(); return 0; }