#pragma once struct pair { void* first; void* second; }; struct pair* new_pair(void* first, void* second); struct pair* copy_pair(const struct pair* src, void* (*copy_first)(const void*), void* (*copy_second)(const void*)); void free_pair(struct pair* p, void (*free_first)(void*), void (*free_second)(void*)); int cmp_pair(const struct pair* a, const struct pair* b, int (*cmp_first)(const void*, const void*), int (*cmp_second)(const void*, const void*));