Eulerization:
In order to make our graph Eulerian, we consider
all odd-degree vertices in the connected graph and make
a clique of potential edges based on distance.
We greedily add edges between odd nodes until no odd nodes remain.
Finally,we remove our temporary edge, changing the graph from Eulerian
to semi-Eulerian. This is a connected, semi-Eulerian graph that contains all edges in the input.
A lower total weight matching is possible by connecting components and ensuring
node evenness together in a global process, as well as by using minimum-weight matching rather than greedy selection, however this optimization is not crucial for our purposes.