#!/usr/bin/env python # 29-Z3-4: Zdobení stromečku # Autor: Ondra Hlavatý (N, M) = (int(x) for x in input().split()) # Načtení hran # V množinách sousedů dvojice (u, t), kde: # u je sousedící vrchol # t je čas, ve kterém hrana vznikla neigh = [set() for _ in range(N)] for i in range(M): (u, v) = (int(x) - 1 for x in input().split()) neigh[u].add((v, i)) neigh[v].add((u, i)) # Měl graf v čase time cyklus? def has_cycle(time): marked = [False for _ in neigh] stack = [] for i in range(N): if marked[i]: # už prohledaná oblast continue # Prohledávání do hloubky # Na zásobníku (u, v) značí, že do vrcholu u jsme přišli z v stack.append((i, None)) marked[i] = True while len(stack): (v, p) = stack.pop() for (u, t) in neigh[v]: if t > time: # hrana zatím neexistuje continue if u == p: # vrchol, ze kterého jsme přišli = stejná hrana continue if marked[u]: # už prohledaný = máme cyklus return True stack.append((u, v)) marked[u] = True return False # Binární vyhledávání begin = 0 end = M while begin + 1 != end: half = (end + begin) // 2 if has_cycle(half): end = half else: begin = half print(end + 1) # hrany indexujeme od 1