#include <iostream>
typedef int ptr_t;
void *dereference(ptr_t what, int num)
{
ptr_t our_ptr = what;
ptr_t *ptr = (ptr_t *)what;
ptr_t last, diff;
last = what;
for (int i = 0; i < num; i++) {
// Grab the contents of the memory at our_ptr
our_ptr = *ptr;
// Set ptr to contents of memory at our_ptr
ptr = (ptr_t *)our_ptr;
diff = (our_ptr - last);
if ((i != 0)) { // diff comes out 16 for some reason
std::cout << diff << '\n';
}
last = our_ptr;
}
return (void *)ptr;
}
#include <cstdlib>
int main() {
int num_elements;
if (std::cin >> num_elements) {
ptr_t *pstr = (ptr_t *)malloc(num_elements * sizeof(ptr_t));
for(int i=0; i<num_elements-1; ++i)
pstr[i] = (ptr_t)(&pstr[i+1]);
pstr[num_elements-1] = (ptr_t)NULL;
ptr_t* r = (ptr_t*)dereference(pstr[0], num_elements-2);
std::cout << (r - &pstr[0]);
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdHlwZWRlZiBpbnQgcHRyX3Q7Cgp2b2lkICpkZXJlZmVyZW5jZShwdHJfdCB3aGF0LCBpbnQgbnVtKQp7CglwdHJfdCBvdXJfcHRyID0gd2hhdDsKCXB0cl90ICpwdHIgPSAocHRyX3QgKil3aGF0OwoKCXB0cl90IGxhc3QsIGRpZmY7CglsYXN0ID0gd2hhdDsKCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKCQkvLyBHcmFiIHRoZSBjb250ZW50cyBvZiB0aGUgbWVtb3J5IGF0IG91cl9wdHIKCQlvdXJfcHRyID0gKnB0cjsKCQkvLyBTZXQgcHRyIHRvIGNvbnRlbnRzIG9mIG1lbW9yeSBhdCBvdXJfcHRyCgkJcHRyID0gKHB0cl90ICopb3VyX3B0cjsKCgkJZGlmZiA9IChvdXJfcHRyIC0gbGFzdCk7CgkJaWYgKChpICE9IDApKSB7IC8vIGRpZmYgY29tZXMgb3V0IDE2IGZvciBzb21lIHJlYXNvbgoJCQlzdGQ6OmNvdXQgPDwgZGlmZiA8PCAnXG4nOwoJCX0KCQlsYXN0ID0gb3VyX3B0cjsKCX0KCgoJcmV0dXJuICh2b2lkICopcHRyOwp9CgojaW5jbHVkZSA8Y3N0ZGxpYj4KaW50IG1haW4oKSB7CiAgIGludCBudW1fZWxlbWVudHM7CiAgIGlmIChzdGQ6OmNpbiA+PiBudW1fZWxlbWVudHMpIHsKICAgICAgIHB0cl90ICpwc3RyID0gKHB0cl90ICopbWFsbG9jKG51bV9lbGVtZW50cyAqIHNpemVvZihwdHJfdCkpOwogICAgICAgZm9yKGludCBpPTA7IGk8bnVtX2VsZW1lbnRzLTE7ICsraSkKICAgICAgICAgICBwc3RyW2ldID0gKHB0cl90KSgmcHN0cltpKzFdKTsKICAgICAgIHBzdHJbbnVtX2VsZW1lbnRzLTFdID0gKHB0cl90KU5VTEw7CiAgICAgICBwdHJfdCogciA9IChwdHJfdCopZGVyZWZlcmVuY2UocHN0clswXSwgbnVtX2VsZW1lbnRzLTIpOwogICAgICAgc3RkOjpjb3V0IDw8IChyIC0gJnBzdHJbMF0pOwogICAgfQogICAgcmV0dXJuIDA7Cn0=