#include <iostream>
using namespace std;
int main() {
// set up variables and constants and read input
unsigned int N, S, P, Q, mu, nu;
const unsigned int m = 1 << 31;
cin >> N >> S >> P >> Q;
// set up sequence
unsigned int* a = new unsigned int[N];
a[0] = S % m;
for (int i = 1; i < N; i++) {
a[i] = (a[i-1] * P + Q) % m;
}
// begin cycle detection (-> floyd's algorithm)
for (int i = 0; i < N; i++) {
if ((2*i)+1 > N-1) {
// no cycle found -> N distinct values, output N, clean up and terminate execution
cout << N;
delete[] a;
return 0;
} else if(a[i] == a[(2*i)+1]) {
// cycle detected, break loop to proceed with algorithm
nu = i+1;
break;
}
}
// find first element of cycle
for (int i = 0; i < N; i++) {
if(a[i] == a[i+nu]) {
mu = i;
break;
}
}
// find first reoccurence of first cycle element
for (int i = mu+1; i < N; i++) {
if(a[mu] == a[i]) {
// number of elements up until first repeated cycle element = number of distinct values in sequence
cout << i;
break;
}
}
// clean up, terminate execution
delete[] a;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IG1haW4oKSB7CiAgICAKICAgIC8vIHNldCB1cCB2YXJpYWJsZXMgYW5kIGNvbnN0YW50cyBhbmQgcmVhZCBpbnB1dAogICAgCiAgICB1bnNpZ25lZCBpbnQgTiwgUywgUCwgUSwgbXUsIG51OwogICAgCiAgICBjb25zdCB1bnNpZ25lZCBpbnQgbSA9IDEgPDwgMzE7CiAgICAKICAgIGNpbiA+PiBOID4+IFMgPj4gUCA+PiBROwogICAgCiAgICAvLyBzZXQgdXAgc2VxdWVuY2UKICAgIAogICAgdW5zaWduZWQgaW50KiBhID0gbmV3IHVuc2lnbmVkIGludFtOXTsKICAgIAogICAgYVswXSA9IFMgJSBtOwogICAgCiAgICBmb3IgKGludCBpID0gMTsgaSA8IE47IGkrKykgewogICAgICAgIGFbaV0gPSAoYVtpLTFdICogUCArIFEpICUgbTsKICAgIH0KICAgIAogICAgLy8gYmVnaW4gY3ljbGUgZGV0ZWN0aW9uICgtPiBmbG95ZCdzIGFsZ29yaXRobSkKICAgIAogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKICAgICAgICAKICAgICAgICBpZiAoKDIqaSkrMSA+IE4tMSkgewogICAgICAgIAogICAgICAgICAgICAvLyBubyBjeWNsZSBmb3VuZCAtPiBOIGRpc3RpbmN0IHZhbHVlcywgb3V0cHV0IE4sIGNsZWFuIHVwIGFuZCB0ZXJtaW5hdGUgZXhlY3V0aW9uCiAgICAgICAgICAgIAogICAgICAgICAgICBjb3V0IDw8IE47CiAgICAgICAgICAgIGRlbGV0ZVtdIGE7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIAogICAgICAgIH0gZWxzZSBpZihhW2ldID09IGFbKDIqaSkrMV0pIHsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIGN5Y2xlIGRldGVjdGVkLCBicmVhayBsb29wIHRvIHByb2NlZWQgd2l0aCBhbGdvcml0aG0KICAgICAgICAgICAgCiAgICAgICAgICAgIG51ID0gaSsxOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CiAgICAKICAgIC8vIGZpbmQgZmlyc3QgZWxlbWVudCBvZiBjeWNsZQogICAgCiAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgewogICAgICAgIAogICAgICAgIGlmKGFbaV0gPT0gYVtpK251XSkgewogICAgICAgICAgICBtdSA9IGk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIAogICAgLy8gZmluZCBmaXJzdCByZW9jY3VyZW5jZSBvZiBmaXJzdCBjeWNsZSBlbGVtZW50CiAgICAKICAgIGZvciAoaW50IGkgPSBtdSsxOyBpIDwgTjsgaSsrKSB7CiAgICAgICAgaWYoYVttdV0gPT0gYVtpXSkgewogICAgICAgICAgICAKICAgICAgICAgICAgLy8gbnVtYmVyIG9mIGVsZW1lbnRzIHVwIHVudGlsIGZpcnN0IHJlcGVhdGVkIGN5Y2xlIGVsZW1lbnQgPSBudW1iZXIgb2YgZGlzdGluY3QgdmFsdWVzIGluIHNlcXVlbmNlCiAgICAgICAgICAgIAogICAgICAgICAgICBjb3V0IDw8IGk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIAogICAgLy8gY2xlYW4gdXAsIHRlcm1pbmF0ZSBleGVjdXRpb24KICAgIAogICAgZGVsZXRlW10gYTsKICAgIHJldHVybiAwOwp9Cg==