Tagy: union-find
Obtiažnosť: hard

Váhy darčekov

Skôr než si Miško darčeky rozbalí, snaží sa uhádnuť, v ktorom z nich sa čo skrýva. A pri hádaní mu často pomôže okrem rozmerov darčeka aj jeho váha. Snaží sa preto zistiť, ktorý darček koľko váži. Pomocou dvojramenných váh a pár malých závaží vie Miško porovnať váhu ľubovoľných dvoch darčekov.

Napíšte program, ktorý bude spracúvať postupnosť vážení a odpovedať pomedzi ne Miškovi na otázky.

Vstup

V prvom riadku vstupu sú dve celé čísla $d$ a $u$: počet darčekov a počet udalostí. Darčeky sú očíslované od $1$ po $n$. Platí $2 \leq d \leq 100~000$ a $1 \leq u \leq 100~000$. Nasleduje $u$ riadkov. Každý z nich popisuje buď nové váženie, alebo otázku. Váženie popisujeme nasledovným riadkom:

! a b w

Tento riadok hovorí, že darček $b$ je o $w$ gramov ťažší ako darček $a$. Môžete predpokladať, že $0 \leq w \leq 1~000~000$. Môžete tiež predpokladať, že všetky merania sú presné a navzájom konzistentné.

Otázku popisujeme nasledovným riadkom:

? a b

Na túto otázku treba odpovedať, o koľko gramov je darček $b$ ťažší ako darček $a$. Občas sa táto odpoveď nemusí dať z dovtedy známych vážení určiť. Môžete predpokladať, že každá odpoveď, ktorá sa určiť dá, bude v absolútnej hodnote nanajvýš rovná $1~000~000$.

Výstup

Pre každú otázku vypíšte jeden riadok: buď s odpoveďou na ňu, alebo s textom UNKNOWN ak danú odpoveď z dovtedy uskutočnených vážení určiť nevieme.

Príklady

Vstup

2 3
! 1 2 1
? 1 2
? 2 1

Výstup

1
-1

Vstup

4 7
! 1 2 100
? 2 3
! 2 3 100
? 2 3
? 1 3
! 4 3 150
? 4 1

Výstup

UNKNOWN
100
200
-50
Ak chceš riešiť túto úlohu, musíš sa najprv prihlásiť.