Suppose that you want to add an extra operation, deunion, which undoes the last union operation not already undone. One way to do so is to use union-by-rank-but a compressionless find-and use a stack to store the old state prior to a union. A deunion can be implemented by popping the stack to retrieve an old state.
a. Why can't we use path compression?
b. Implement the union/find/deunion algorithm.