# Diseñar una red

Una empresa tiene n sedes y quiere unirlas con fibra óptica, de modo que desde cualquier sede se pueda llegar a
cualquier otra, directamente o pasando por otras sedes. Un proveedor presentó una lista de m tramos que está dispuesto
a instalar. Cada tramo une dos sedes distintas, tiene un precio y sirve en los dos sentidos. El proveedor puede ofrecer
más de un tramo entre las mismas dos sedes, con precios distintos o iguales.

La empresa quiere saber cuánto es lo mínimo que tiene que pagar para que todas las sedes queden conectadas, o enterarse
de que con esa lista no se puede.

## Entrada

La primera línea tiene dos enteros: n, la cantidad de sedes, y m, la cantidad de tramos. Las sedes se numeran de 1 a n.
Cada una de las m líneas siguientes tiene tres enteros: a, b y c. Hay un tramo entre las sedes a y b que cuesta c.

## Salida

Una línea. Si se pueden conectar todas las sedes con tramos de la lista, el costo total mínimo. Si no se puede, la
palabra `IMPOSIBLE`. Con una sola sede no hace falta ningún tramo, y el costo es 0.

## Límites

- 1 ≤ n ≤ 200 000
- 0 ≤ m ≤ 500 000
- 1 ≤ a, b ≤ n, con a ≠ b
- 1 ≤ c ≤ 1 000 000 000

## Ejemplo

Entrada:

```text
5 7
1 2 4
1 3 6
2 3 5
2 4 9
3 4 7
3 5 8
4 5 3
```

Salida:

```text
19
```

Conviene contratar los tramos 4-5 (3), 1-2 (4), 2-3 (5) y 3-4 (7), que suman 19. El tramo 1-3 no hace falta aunque cueste
solo 6: 1 y 3 ya quedan unidos a través de 2.

Si la lista fuera solo `1 2 4` y `4 5 3`, la respuesta sería `IMPOSIBLE`.

## Tiempo

1 segundo por caso, compilado con `-O2`. Corran `make test` para probar con el juez.
