#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;
}
