#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef int Int;
typedef struct _LinkedListInt{
Int value;
struct _LinkedListInt *next;
} LinkedListInt;
LinkedListInt *LinkedListInt_New(const Int *value){
LinkedListInt
*result
= calloc(0, sizeof(LinkedListInt
)); memcpy(&result
->value
, value
, sizeof(Int
)); return result;
}
void LinkedListInt_Free(LinkedListInt *list){
LinkedListInt *prev;
while(prev = list){
list = list->next;
}
LinkedListInt *LinkedListInt_Top(LinkedListInt *list){
if(!list) return ((void *)0);
while(list->next)
list = list->next;
return list;
}
int LinkedListInt_Push(LinkedListInt *list, const Int *value){
if(list == ((void *)0))
return LinkedListInt_New(value);
LinkedListInt *top = LinkedListInt_Top(list);
top->next = LinkedListInt_New(value);
return list;
}
void LinkedListInt_ForEach(const LinkedListInt *list, void(*op)(const Int *)){
while(list){
op(&list->value);
list = list->next;
}
}
int main(void){ return 0;/* identical */ }
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgoKdHlwZWRlZiBpbnQgSW50Owp0eXBlZGVmIHN0cnVjdCBfTGlua2VkTGlzdEludHsgCglJbnQgdmFsdWU7IAoJc3RydWN0IF9MaW5rZWRMaXN0SW50ICpuZXh0OyAKfSBMaW5rZWRMaXN0SW50OyAKCkxpbmtlZExpc3RJbnQgKkxpbmtlZExpc3RJbnRfTmV3KGNvbnN0IEludCAqdmFsdWUpeyAKCUxpbmtlZExpc3RJbnQgKnJlc3VsdCA9IGNhbGxvYygwLCBzaXplb2YoTGlua2VkTGlzdEludCkpOyAKCW1lbWNweSgmcmVzdWx0LT52YWx1ZSwgdmFsdWUsIHNpemVvZihJbnQpKTsgCglyZXR1cm4gcmVzdWx0OyAKfSAKCnZvaWQgTGlua2VkTGlzdEludF9GcmVlKExpbmtlZExpc3RJbnQgKmxpc3QpeyAKCUxpbmtlZExpc3RJbnQgKnByZXY7IAoJd2hpbGUocHJldiA9IGxpc3QpeyAKCQlsaXN0ID0gbGlzdC0+bmV4dDsgCgkJZnJlZShwcmV2KTsgCgl9IGZyZWUobGlzdCk7IAp9IAoKTGlua2VkTGlzdEludCAqTGlua2VkTGlzdEludF9Ub3AoTGlua2VkTGlzdEludCAqbGlzdCl7IAoJaWYoIWxpc3QpIHJldHVybiAoKHZvaWQgKikwKTsgCgl3aGlsZShsaXN0LT5uZXh0KSAKCQlsaXN0ID0gbGlzdC0+bmV4dDsgCglyZXR1cm4gbGlzdDsgCn0gCgppbnQgTGlua2VkTGlzdEludF9QdXNoKExpbmtlZExpc3RJbnQgKmxpc3QsIGNvbnN0IEludCAqdmFsdWUpeyAKCWlmKGxpc3QgPT0gKCh2b2lkICopMCkpIAoJCXJldHVybiBMaW5rZWRMaXN0SW50X05ldyh2YWx1ZSk7IAoJTGlua2VkTGlzdEludCAqdG9wID0gTGlua2VkTGlzdEludF9Ub3AobGlzdCk7IAoJdG9wLT5uZXh0ID0gTGlua2VkTGlzdEludF9OZXcodmFsdWUpOyAKCXJldHVybiBsaXN0OyAKfSAKCnZvaWQgTGlua2VkTGlzdEludF9Gb3JFYWNoKGNvbnN0IExpbmtlZExpc3RJbnQgKmxpc3QsIHZvaWQoKm9wKShjb25zdCBJbnQgKikpeyAKCXdoaWxlKGxpc3QpeyAKCQlvcCgmbGlzdC0+dmFsdWUpOyAKCQlsaXN0ID0gbGlzdC0+bmV4dDsgCgl9IAp9CgppbnQgbWFpbih2b2lkKXsgcmV0dXJuIDA7LyogaWRlbnRpY2FsICovIH0=