Florestas dinâmicas

Florestas dinâmicas implementadas usando Euler tour trees. As Euler tour trees devem ser implementadas com uma splay tree ou uma treap.

Interface:

DynamicForest(n): cria e devolve uma floresta com n vértices e nenhuma aresta
Connected(F,u,v): true se u e v estão na mesma componente da floresta e false caso contrário
Link(F,u,v): insere a aresta uv na floresta
Cut(F,u,v): remove a aresta entre u e v
Print(): imprime todas as arestas da floresta.

Codificação das operações:

1 <n>     significa DynamicForest(n)
2 <u> <v> significa println(Connected(F,u,v))
3 <u> <v> significa Link(F,u,v)
4 <u> <v> significa Cut(F,u,v)
5         significa Print(): imprime todas as arestas da floresta.
Exemplo de entrada para o programa de testes:
1 10 
3 1 2
3 2 3
3 3 4
3 4 5
3 5 6
3 7 8
3 7 9
3 7 10
5
2 1 6
2 2 5
2 3 8
2 9 10
2 7 5
4 3 4
2 1 6
2 3 4
3 1 6
2 3 4
4 7 10
2 1 10
2 8 10
3 4 10
2 1 10
2 8 10
5
Saída esperada para este teste:

A lista de arestas das floresta pode sair em uma ordem distinta da apresentada abaixo, porém cada aresta u v deve ser impressa com u < v, com um espaço entre o u e o v, e entre duas arestas, dois espaços.

1 2  2 3  3 4  4 5  5 6  7 8  7 9  7 10
True
True
False
True
False
False
False
True
False
False
True
False
1 2  2 3  4 5  5 6  1 6  4 10  7 8  7 9