import os , sys , getpass
import math , random , decimal , queue, heapq , bisect , itertools , functools, collections , string , operator , timeit , pprint
from bisect import bisect , bisect_left
from collections import defaultdict, OrderedDict, deque, Counter
from functools import cmp_to_key, lru_cache, partial, partialmethod, reduce
from heapq import heapify, heappush, heappushpop, heappop, heapreplace, nlargest, nsmallest
from itertools import accumulate, chain, combinations, combinations_with_replacement, compress, count, cycle, dropwhile, filterfalse, groupby, islice, permutations, product, repeat, starmap, takewhile, tee, zip_longest
from math import gcd, factorial, isqrt, comb, perm, prod
from queue import Queue , PriorityQueue, LifoQueue
from random import choice, choices, shuffle, sample, random , randint, randrange, uniform, seed, getstate, setstate, getrandbits
from string import ascii_letters, ascii_lowercase, ascii_uppercase, digits, hexdigits, octdigits, punctuation, printable, whitespace
from typing import List, Optional, Tuple, Dict, Set, Union, Any
sys .stdin = open ( os .path .join ( os .getcwd ( ) , 'a1.txt' ) , 'r' ) if getpass .getuser ( ) == '4a' else sys .stdin
I = lambda : [ int ( a) for l in sys .stdin for a in l.strip ( ) .split ( ) ]
S = lambda : [ a for l in sys .stdin for a in l.strip ( ) .split ( ) ]
IM = lambda : [ [ int ( a) for a in l.split ( ) ] for l in sys .stdin ]
SM = lambda : [ [ a for a in l.split ( ) ] for l in sys .stdin ]
D = lambda k= 1 : { i: list ( map ( int , input ( ) .split ( ) ) ) for i in range ( 1 , 1 + int ( input ( ) ) * k) }
DS = lambda : { i: [ ( int ( x[ 0 ] ) , x[ 1 ] ) for _ in range ( int ( input ( ) ) )
for x in [ input ( ) .split ( ) ] ] for i in range ( int ( input ( ) ) ) }
moore = ( ( 1 , 0 ) , ( 1 , 1 ) , ( 0 , 1 ) , ( -1 , 1 ) , ( -1 , 0 ) , ( -1 , -1 ) , ( 0 , -1 ) , ( 1 , -1 ) )
von = ( ( 1 , 0 ) , ( 0 , 1 ) , ( -1 , 0 ) , ( 0 , -1 ) )
az, AZ, mod, inf = ascii_lowercase, ascii_uppercase, 1 _000_000_007, float ( 'inf' )
CNR = lambda n, r: factorial( n) // ( factorial( r) * factorial( n - r) )
PNR = lambda n, r: factorial( n) // factorial( r)
A = IM( )
print ( A) if getpass .getuser ( ) == '4a' else None
def solution( A) :
class Kruskal:
def __init__ ( self , G) :
self .G = G
self .parent = { }
self .rank = { }
self .make_sets ( )
def make_sets( self ) :
for u, v in self .G :
if u not in self .parent :
self .parent [ u] = u
self .rank [ u] = 0
if v not in self .parent :
self .parent [ v] = v
self .rank [ v] = 0
def find( self , x) :
if self .parent [ x] != x:
self .parent [ x] = self .find ( self .parent [ x] )
return self .parent [ x]
def union( self , u, v) :
su, sv = self .find ( u) , self .find ( v)
if su != sv:
if self .rank [ su] > self .rank [ sv] :
self .parent [ sv] = su
else :
self .parent [ su] = sv
if self .rank [ su] == self .rank [ sv] :
self .rank [ sv] += 1
def _mst( self ) :
mst = [ ]
for edge in self .G .keys ( ) :
u, v = edge
if self .find ( u) != self .find ( v) :
self .union ( u, v)
mst.append ( ( u, v, self .G [ edge] ) )
return mst
N, M = A[ 0 ]
graph = defaultdict( int )
for i in range ( 1 , len ( A) ) :
if i % 2 == 1 :
k, c = A[ i]
else :
edges = A[ i]
for ii in range ( len ( edges) ) :
for jj in range ( ii + 1 , len ( edges) ) :
if edges[ ii] < edges[ jj] :
if ( edges[ jj] , edges[ ii] ) not in graph or ( edges[ ii] , edges[ jj] ) not in graph:
graph[ ( edges[ jj] , edges[ ii] ) ] = c
graph[ ( edges[ ii] , edges[ jj] ) ] = c
continue
if ( edges[ jj] , edges[ ii] ) in graph and graph[ ( edges[ jj] , edges[ ii] ) ] > c:
graph[ ( edges[ jj] , edges[ ii] ) ] = c
if ( edges[ ii] , edges[ jj] ) in graph and graph[ ( edges[ ii] , edges[ jj] ) ] > c:
graph[ ( edges[ ii] , edges[ jj] ) ] = c
kruskal = Kruskal( graph)
MST = kruskal._mst( )
res = 0
nodes = set ( )
# print(MST)
for x, y, z in sorted ( MST, key= lambda o: o[ -1 ] ) :
res += z
nodes.update ( { x, y} )
if sorted ( nodes) != list ( range ( 1 , N + 1 ) ) :
print ( -1 )
else :
print ( res)
solution( A)
aW1wb3J0IG9zLCBzeXMsIGdldHBhc3MKaW1wb3J0IG1hdGgsIHJhbmRvbSwgZGVjaW1hbCwgcXVldWUsIGhlYXBxLCBiaXNlY3QsIGl0ZXJ0b29scywgZnVuY3Rvb2xzLCBjb2xsZWN0aW9ucywgc3RyaW5nLCBvcGVyYXRvciwgdGltZWl0LCBwcHJpbnQKZnJvbSBiaXNlY3QgaW1wb3J0IGJpc2VjdCwgYmlzZWN0X2xlZnQKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QsIE9yZGVyZWREaWN0LCBkZXF1ZSwgQ291bnRlcgpmcm9tIGZ1bmN0b29scyBpbXBvcnQgY21wX3RvX2tleSwgbHJ1X2NhY2hlLCBwYXJ0aWFsLCBwYXJ0aWFsbWV0aG9kLCByZWR1Y2UKZnJvbSBoZWFwcSBpbXBvcnQgaGVhcGlmeSwgaGVhcHB1c2gsIGhlYXBwdXNocG9wLCBoZWFwcG9wLCBoZWFwcmVwbGFjZSwgbmxhcmdlc3QsIG5zbWFsbGVzdApmcm9tIGl0ZXJ0b29scyBpbXBvcnQgYWNjdW11bGF0ZSwgY2hhaW4sIGNvbWJpbmF0aW9ucywgY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQsIGNvbXByZXNzLCBjb3VudCwgY3ljbGUsIGRyb3B3aGlsZSwgZmlsdGVyZmFsc2UsIGdyb3VwYnksIGlzbGljZSwgcGVybXV0YXRpb25zLCBwcm9kdWN0LCByZXBlYXQsIHN0YXJtYXAsIHRha2V3aGlsZSwgdGVlLCB6aXBfbG9uZ2VzdApmcm9tIG1hdGggaW1wb3J0IGdjZCwgZmFjdG9yaWFsLCBpc3FydCwgY29tYiwgcGVybSwgcHJvZApmcm9tIHF1ZXVlIGltcG9ydCBRdWV1ZSwgUHJpb3JpdHlRdWV1ZSwgTGlmb1F1ZXVlCmZyb20gcmFuZG9tIGltcG9ydCBjaG9pY2UsIGNob2ljZXMsIHNodWZmbGUsIHNhbXBsZSwgcmFuZG9tLCByYW5kaW50LCByYW5kcmFuZ2UsIHVuaWZvcm0sIHNlZWQsIGdldHN0YXRlLCBzZXRzdGF0ZSwgZ2V0cmFuZGJpdHMKZnJvbSBzdHJpbmcgaW1wb3J0IGFzY2lpX2xldHRlcnMsIGFzY2lpX2xvd2VyY2FzZSwgYXNjaWlfdXBwZXJjYXNlLCBkaWdpdHMsIGhleGRpZ2l0cywgb2N0ZGlnaXRzLCBwdW5jdHVhdGlvbiwgcHJpbnRhYmxlLCB3aGl0ZXNwYWNlCmZyb20gdHlwaW5nIGltcG9ydCBMaXN0LCBPcHRpb25hbCwgVHVwbGUsIERpY3QsIFNldCwgVW5pb24sIEFueQoKc3lzLnN0ZGluID0gb3Blbihvcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksICdhMS50eHQnKSwgJ3InKSBpZiBnZXRwYXNzLmdldHVzZXIoKSA9PSAnNGEnIGVsc2Ugc3lzLnN0ZGluCkkgPSBsYW1iZGE6IFtpbnQoYSkgZm9yIGwgaW4gc3lzLnN0ZGluIGZvciBhIGluIGwuc3RyaXAoKS5zcGxpdCgpXQpTID0gbGFtYmRhOiBbYSBmb3IgbCBpbiBzeXMuc3RkaW4gZm9yIGEgaW4gbC5zdHJpcCgpLnNwbGl0KCldCklNID0gbGFtYmRhOiBbW2ludChhKSBmb3IgYSBpbiBsLnNwbGl0KCldIGZvciBsIGluIHN5cy5zdGRpbl0KU00gPSBsYW1iZGE6IFtbYSBmb3IgYSBpbiBsLnNwbGl0KCldIGZvciBsIGluIHN5cy5zdGRpbl0KRCA9IGxhbWJkYSBrPTE6IHtpOiBsaXN0KG1hcChpbnQsIGlucHV0KCkuc3BsaXQoKSkpIGZvciBpIGluIHJhbmdlKDEsIDEgKyBpbnQoaW5wdXQoKSkgKiBrKX0KRFMgPSBsYW1iZGE6IHtpOiBbKGludCh4WzBdKSwgeFsxXSkgZm9yIF8gaW4gcmFuZ2UoaW50KGlucHV0KCkpKQogICAgICAgICAgICAgICAgICBmb3IgeCBpbiBbaW5wdXQoKS5zcGxpdCgpXV0gZm9yIGkgaW4gcmFuZ2UoaW50KGlucHV0KCkpKX0KCm1vb3JlID0gKCgxLCAwKSwgKDEsIDEpLCAoMCwgMSksICgtMSwgMSksICgtMSwgMCksICgtMSwgLTEpLCAoMCwgLTEpLCAoMSwgLTEpKQp2b24gPSAoKDEsIDApLCAoMCwgMSksICgtMSwgMCksICgwLCAtMSkpCmF6LCBBWiwgbW9kLCBpbmYgPSBhc2NpaV9sb3dlcmNhc2UsIGFzY2lpX3VwcGVyY2FzZSwgMV8wMDBfMDAwXzAwNywgZmxvYXQoJ2luZicpCkNOUiA9IGxhbWJkYSBuLCByOiBmYWN0b3JpYWwobikgLy8gKGZhY3RvcmlhbChyKSAqIGZhY3RvcmlhbChuIC0gcikpClBOUiA9IGxhbWJkYSBuLCByOiBmYWN0b3JpYWwobikgLy8gZmFjdG9yaWFsKHIpCgpBID0gSU0oKQpwcmludChBKSBpZiBnZXRwYXNzLmdldHVzZXIoKSA9PSAnNGEnIGVsc2UgTm9uZQoKCmRlZiBzb2x1dGlvbihBKToKICAgIGNsYXNzIEtydXNrYWw6CiAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIEcpOgogICAgICAgICAgICBzZWxmLkcgPSBHCiAgICAgICAgICAgIHNlbGYucGFyZW50ID0ge30KICAgICAgICAgICAgc2VsZi5yYW5rID0ge30KICAgICAgICAgICAgc2VsZi5tYWtlX3NldHMoKQoKICAgICAgICBkZWYgbWFrZV9zZXRzKHNlbGYpOgogICAgICAgICAgICBmb3IgdSwgdiBpbiBzZWxmLkc6CiAgICAgICAgICAgICAgICBpZiB1IG5vdCBpbiBzZWxmLnBhcmVudDoKICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcmVudFt1XSA9IHUKICAgICAgICAgICAgICAgICAgICBzZWxmLnJhbmtbdV0gPSAwCiAgICAgICAgICAgICAgICBpZiB2IG5vdCBpbiBzZWxmLnBhcmVudDoKICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcmVudFt2XSA9IHYKICAgICAgICAgICAgICAgICAgICBzZWxmLnJhbmtbdl0gPSAwCgogICAgICAgIGRlZiBmaW5kKHNlbGYsIHgpOgogICAgICAgICAgICBpZiBzZWxmLnBhcmVudFt4XSAhPSB4OgogICAgICAgICAgICAgICAgc2VsZi5wYXJlbnRbeF0gPSBzZWxmLmZpbmQoc2VsZi5wYXJlbnRbeF0pCiAgICAgICAgICAgIHJldHVybiBzZWxmLnBhcmVudFt4XQoKICAgICAgICBkZWYgdW5pb24oc2VsZiwgdSwgdik6CiAgICAgICAgICAgIHN1LCBzdiA9IHNlbGYuZmluZCh1KSwgc2VsZi5maW5kKHYpCiAgICAgICAgICAgIGlmIHN1ICE9IHN2OgogICAgICAgICAgICAgICAgaWYgc2VsZi5yYW5rW3N1XSA+IHNlbGYucmFua1tzdl06CiAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJlbnRbc3ZdID0gc3UKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJlbnRbc3VdID0gc3YKICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnJhbmtbc3VdID09IHNlbGYucmFua1tzdl06CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmFua1tzdl0gKz0gMQoKICAgICAgICBkZWYgX21zdChzZWxmKToKICAgICAgICAgICAgbXN0ID0gW10KICAgICAgICAgICAgZm9yIGVkZ2UgaW4gc2VsZi5HLmtleXMoKToKICAgICAgICAgICAgICAgIHUsIHYgPSBlZGdlCiAgICAgICAgICAgICAgICBpZiBzZWxmLmZpbmQodSkgIT0gc2VsZi5maW5kKHYpOgogICAgICAgICAgICAgICAgICAgIHNlbGYudW5pb24odSwgdikKICAgICAgICAgICAgICAgICAgICBtc3QuYXBwZW5kKCh1LCB2LCBzZWxmLkdbZWRnZV0pKQogICAgICAgICAgICByZXR1cm4gbXN0CgogICAgTiwgTSA9IEFbMF0KICAgIGdyYXBoID0gZGVmYXVsdGRpY3QoaW50KQogICAgZm9yIGkgaW4gcmFuZ2UoMSwgbGVuKEEpKToKICAgICAgICBpZiBpICUgMiA9PSAxOgogICAgICAgICAgICBrLCBjID0gQVtpXQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGVkZ2VzID0gQVtpXQogICAgICAgICAgICBmb3IgaWkgaW4gcmFuZ2UobGVuKGVkZ2VzKSk6CiAgICAgICAgICAgICAgICBmb3IgamogaW4gcmFuZ2UoaWkgKyAxLCBsZW4oZWRnZXMpKToKICAgICAgICAgICAgICAgICAgICBpZiBlZGdlc1tpaV0gPCBlZGdlc1tqal06CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlZGdlc1tqal0sIGVkZ2VzW2lpXSkgbm90IGluIGdyYXBoIG9yIChlZGdlc1tpaV0sIGVkZ2VzW2pqXSkgbm90IGluIGdyYXBoOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhcGhbKGVkZ2VzW2pqXSwgZWRnZXNbaWldKV0gPSBjCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFwaFsoZWRnZXNbaWldLCBlZGdlc1tqal0pXSA9IGMKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlZGdlc1tqal0sIGVkZ2VzW2lpXSkgaW4gZ3JhcGggYW5kIGdyYXBoWyhlZGdlc1tqal0sIGVkZ2VzW2lpXSldID4gYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYXBoWyhlZGdlc1tqal0sIGVkZ2VzW2lpXSldID0gYwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWRnZXNbaWldLCBlZGdlc1tqal0pIGluIGdyYXBoIGFuZCBncmFwaFsoZWRnZXNbaWldLCBlZGdlc1tqal0pXSA+IGM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFwaFsoZWRnZXNbaWldLCBlZGdlc1tqal0pXSA9IGMKCiAgICBrcnVza2FsID0gS3J1c2thbChncmFwaCkKICAgIE1TVCA9IGtydXNrYWwuX21zdCgpCiAgICByZXMgPSAwCiAgICBub2RlcyA9IHNldCgpCiAgICAjIHByaW50KE1TVCkKICAgIGZvciB4LCB5LCB6IGluIHNvcnRlZChNU1QsIGtleT1sYW1iZGEgbzogb1stMV0pOgogICAgICAgIHJlcyArPSB6CiAgICAgICAgbm9kZXMudXBkYXRlKHt4LCB5fSkKCiAgICBpZiBzb3J0ZWQobm9kZXMpICE9IGxpc3QocmFuZ2UoMSwgTiArIDEpKToKICAgICAgICBwcmludCgtMSkKICAgIGVsc2U6CiAgICAgICAgcHJpbnQocmVzKQoKCnNvbHV0aW9uKEEpCg==