void demo(uint32_t N) {
  printf("N = %d\n", N);
  uint32_t * z = malloc(N * sizeof(uint32_t));
  for(uint32_t i = 0 ; i < N; ++i) z[i] = rand(); // some rand. number
  uint32_t nmbr = 500;
  uint32_t * accesses = malloc(nmbr * sizeof(uint32_t));
  for(uint32_t i = 0 ; i < nmbr; ++i) accesses[i] = rand(); // some rand. number
  uint32_t expected1 = modsum(z,N,accesses,nmbr);
  uint32_t expected2 = fastsum(z,N,accesses,nmbr);
  BEST_TIME(modsum(z,N,accesses,nmbr), expected1, 1000, nmbr);
  BEST_TIME(fastsum(z,N,accesses,nmbr), expected2, 1000, nmbr);
#ifdef __AVX2__
  uint32_t expected3 = vectorsum(z,N,accesses,nmbr);
  if(N % 4 == 0) BEST_TIME(vectorsum(z,N,accesses,nmbr), expected3, 1000, nmbr);
  uint32_t expected4 = maskedvectorsum(z,N,accesses,nmbr);
  if(N % 8 == 0) BEST_TIME(maskedvectorsum(z,N,accesses,nmbr), expected4, 1000, nmbr);
#endif
  free(z);
  free(accesses);
}
 void addTo(vector<int>& cart, vector<int>& offer, int& cost, vector<int>& price, int& min_cost, vector<int>& needs, int i) {
     vectorsum(cart, offer);
     cost += (offer[offer.size()-1]-sums[i]);
     if (underfit(cart, needs)) min_cost = min(min_cost, cost);
 }