#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1000010;
int n, m, p, q;
int color[N], ptr[N];
void init()
{
for(int i = 0; i < N; i ++ ) ptr[i] = i;
}
int find(int x)
{
if(ptr[x] == x) return x;
return ptr[x] = find(ptr[x]);
}
int main()
{
init();
cin >> n >> m >> p >> q;
for(int i = m; i >= 1; i -- )//倒着染色
{
int a = (i * p + q) % n + 1, b = (i * q + p) % n + 1;
int r = max(a, b), l = min(a, b);//处理一下顺序
int pa = find(l);//找到指针指向的点
while(pa <= r)
{
color[pa] = i;//染色
ptr[pa] = find(pa + 1);//指针跳跃
pa = ptr[pa];//下一个点
}
}
//卡常数,输出必须用scanf
for(int i = 1; i <= n; i ++ ) printf("%d\n", color[i]);
return 0;
}