#include <stdio.h>
 
int findDuplicate(int array[], int length) {
	int i = 0;
	int diff = 0;
	long long diffsq = 0;
 
	for (; i < length; ++i) {
		diff += i - array[i];
		diffsq += ((long long)i)*i - ((long long)array[i])*array[i];
	}
 
	return (int)((diffsq / diff - diff) / 2);
}
 
int findAndDisplayResult (int array[], int length) {
	int dup = findDuplicate(array, length);
	printf("dup = %d (0x%x)\n", dup
, dup
); 	for (int i = 0; i < length; ++i) {
	}
}
 
int main(void) {
	int array[] = {0, 4, 2, 3, 10, 2, 9, 5, 8, 1, 6};
	const int length = sizeof(array)/sizeof(int);
	findAndDisplayResult(array, length);
 
 
	int array2[] = {0, 4, 7, 3, 2, 4, 5, 8, 1, 6};
	findAndDisplayResult(array2, sizeof(array2)/sizeof(int));
 
	int array3[] = {0, 3, 0, 1};
	findAndDisplayResult(array3, sizeof(array3)/sizeof(int));
 
	int array4[] = {2, 1, 1};
	findAndDisplayResult(array4, sizeof(array4)/sizeof(int));
 
	int array5[] = {7, 4, 7, 3, 2, 5, 1, 6};
	findAndDisplayResult(array5, sizeof(array5)/sizeof(int));
 
	int array6[] = {0, 4, 3, 2, 5, 1, 3};
	findAndDisplayResult(array6, sizeof(array6)/sizeof(int));
 
	return 0;
}
 
				I2luY2x1ZGUgPHN0ZGlvLmg+CgppbnQgZmluZER1cGxpY2F0ZShpbnQgYXJyYXlbXSwgaW50IGxlbmd0aCkgewoJaW50IGkgPSAwOwoJaW50IGRpZmYgPSAwOwoJbG9uZyBsb25nIGRpZmZzcSA9IDA7CgkKCWZvciAoOyBpIDwgbGVuZ3RoOyArK2kpIHsKCQlkaWZmICs9IGkgLSBhcnJheVtpXTsKCQlkaWZmc3EgKz0gKChsb25nIGxvbmcpaSkqaSAtICgobG9uZyBsb25nKWFycmF5W2ldKSphcnJheVtpXTsKCX0KCQoJcmV0dXJuIChpbnQpKChkaWZmc3EgLyBkaWZmIC0gZGlmZikgLyAyKTsKfQoKaW50IGZpbmRBbmREaXNwbGF5UmVzdWx0IChpbnQgYXJyYXlbXSwgaW50IGxlbmd0aCkgewoJaW50IGR1cCA9IGZpbmREdXBsaWNhdGUoYXJyYXksIGxlbmd0aCk7CglwcmludGYoImR1cCA9ICVkICgweCV4KVxuIiwgZHVwLCBkdXApOwoJcHJpbnRmKCJhcnJheTogIik7Cglmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CgkJcHJpbnRmKCIlZCAiLCBhcnJheVtpXSk7Cgl9CglwcmludGYoIlxuIik7Cn0KCmludCBtYWluKHZvaWQpIHsKCWludCBhcnJheVtdID0gezAsIDQsIDIsIDMsIDEwLCAyLCA5LCA1LCA4LCAxLCA2fTsKCWNvbnN0IGludCBsZW5ndGggPSBzaXplb2YoYXJyYXkpL3NpemVvZihpbnQpOwoJZmluZEFuZERpc3BsYXlSZXN1bHQoYXJyYXksIGxlbmd0aCk7CgkKCQoJaW50IGFycmF5MltdID0gezAsIDQsIDcsIDMsIDIsIDQsIDUsIDgsIDEsIDZ9OwoJZmluZEFuZERpc3BsYXlSZXN1bHQoYXJyYXkyLCBzaXplb2YoYXJyYXkyKS9zaXplb2YoaW50KSk7CgkKCWludCBhcnJheTNbXSA9IHswLCAzLCAwLCAxfTsKCWZpbmRBbmREaXNwbGF5UmVzdWx0KGFycmF5Mywgc2l6ZW9mKGFycmF5Mykvc2l6ZW9mKGludCkpOwoJCglpbnQgYXJyYXk0W10gPSB7MiwgMSwgMX07CglmaW5kQW5kRGlzcGxheVJlc3VsdChhcnJheTQsIHNpemVvZihhcnJheTQpL3NpemVvZihpbnQpKTsKCQoJaW50IGFycmF5NVtdID0gezcsIDQsIDcsIDMsIDIsIDUsIDEsIDZ9OwoJZmluZEFuZERpc3BsYXlSZXN1bHQoYXJyYXk1LCBzaXplb2YoYXJyYXk1KS9zaXplb2YoaW50KSk7CgkKCWludCBhcnJheTZbXSA9IHswLCA0LCAzLCAyLCA1LCAxLCAzfTsKCWZpbmRBbmREaXNwbGF5UmVzdWx0KGFycmF5Niwgc2l6ZW9mKGFycmF5Nikvc2l6ZW9mKGludCkpOwoJCglyZXR1cm4gMDsKfQo=