#define VAR A
#include <cassert>
#include <algorithm>
#include <iterator>
#include <random>
#include <vector>
#include <functional>
int signumA(int x) {
if (x > 0)
return 1;
if (x < 0)
return -1;
if (x == 0)
return 0;
assert(false);
}
int signumB(int x) {
return (x>0) - (x<0);
}
int signumC(int x) {
return std::min(std::max(-1, x), 1);
}
int signumD(int x) {
int y = 0;
if (x > 0) y = 1;
if (x < 0) y = -1;
return y;
}
int signumE(int x) {
return x ? x/std::abs(x) : 0;
}
#define CONCAT2(a, b) a ## b
#define CONCAT(a, b) CONCAT2(a, b)
#define signumX CONCAT(signum, VAR)
int main(int argc, const char *argv[]) {
int length = std::atoi(argv[1]);
int iterations = std::atoi(argv[2]);
std::mt19937 mersenne_engine(42); // fixed seed
std::uniform_int_distribution<int> dist(-1000, 1000);
std::vector<int> nums;
generate_n(back_inserter(nums), length, bind(dist, mersenne_engine));
int signumxor = 0;
while (iterations--) {
for (int i : nums)
signumxor ^= signumX(i);
}
return signumxor;
}
I2RlZmluZSBWQVIgQQoKI2luY2x1ZGUgPGNhc3NlcnQ+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxpdGVyYXRvcj4KI2luY2x1ZGUgPHJhbmRvbT4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CgppbnQgc2lnbnVtQShpbnQgeCkgewogIGlmICh4ID4gMCkKICAgICByZXR1cm4gMTsKICBpZiAoeCA8IDApCiAgICAgcmV0dXJuIC0xOwogIGlmICh4ID09IDApCiAgICAgcmV0dXJuIDA7CiAgYXNzZXJ0KGZhbHNlKTsKfQppbnQgc2lnbnVtQihpbnQgeCkgewogIHJldHVybiAoeD4wKSAtICh4PDApOwp9CmludCBzaWdudW1DKGludCB4KSB7CiAgcmV0dXJuIHN0ZDo6bWluKHN0ZDo6bWF4KC0xLCB4KSwgMSk7Cn0KaW50IHNpZ251bUQoaW50IHgpIHsKICBpbnQgeSA9IDA7CiAgaWYgKHggPiAwKSB5ID0gMTsKICBpZiAoeCA8IDApIHkgPSAtMTsKICByZXR1cm4geTsKfQppbnQgc2lnbnVtRShpbnQgeCkgewogIHJldHVybiB4ID8geC9zdGQ6OmFicyh4KSA6IDA7Cn0KCiNkZWZpbmUgQ09OQ0FUMihhLCBiKSBhICMjIGIKI2RlZmluZSBDT05DQVQoYSwgYikgQ09OQ0FUMihhLCBiKQojZGVmaW5lIHNpZ251bVggQ09OQ0FUKHNpZ251bSwgVkFSKQoKaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKmFyZ3ZbXSkgewogIGludCBsZW5ndGggPSBzdGQ6OmF0b2koYXJndlsxXSk7CiAgaW50IGl0ZXJhdGlvbnMgPSBzdGQ6OmF0b2koYXJndlsyXSk7CgogIHN0ZDo6bXQxOTkzNyBtZXJzZW5uZV9lbmdpbmUoNDIpOyAvLyBmaXhlZCBzZWVkCiAgc3RkOjp1bmlmb3JtX2ludF9kaXN0cmlidXRpb248aW50PiBkaXN0KC0xMDAwLCAxMDAwKTsKICAKICBzdGQ6OnZlY3RvcjxpbnQ+IG51bXM7CiAgZ2VuZXJhdGVfbihiYWNrX2luc2VydGVyKG51bXMpLCBsZW5ndGgsIGJpbmQoZGlzdCwgbWVyc2VubmVfZW5naW5lKSk7CgogIGludCBzaWdudW14b3IgPSAwOwogIHdoaWxlIChpdGVyYXRpb25zLS0pIHsKICAgIGZvciAoaW50IGkgOiBudW1zKQogICAgICBzaWdudW14b3IgXj0gc2lnbnVtWChpKTsKICB9CiAgcmV0dXJuIHNpZ251bXhvcjsKfQo=