from collections import deque def main(): import sys input = sys.stdin.read data = input().split() idx = 0 N = int(data[idx]) idx +=1 M = int(data[idx]) idx +=1 adj_out = [[] for _ in range(N)] predecessors = [[] for _ in range(N)] # (A, C) for _ in range(M): A = int(data[idx]) idx +=1 B = int(data[idx]) idx +=1 C = int(data[idx]) idx +=1 adj_out[A].append(B) predecessors[B].append( (A, C) ) # Compute in_degree for each node in_degree = [0]*N for B in range(N): in_degree[B] = len(predecessors[B]) # Kahn's algorithm to find topological order queue = deque() for i in range(N): if in_degree[i] == 0: queue.append(i) top_order = [] while queue: u = queue.popleft() top_order.append(u) for v in adj_out[u]: in_degree[v] -=1 if in_degree[v] == 0: queue.append(v) # Initialize probabilities P = [0.0] * N P[0] = 1.0 # Starting group for B in top_order: if B == 0: continue product = 1.0 for (A, C) in predecessors[B]: prob = C / 100.0 term = 1.0 - (P[A] * prob) product *= term P[B] = 1.0 - product print("{0:.12f}".format(P[N-1])) if __name__ == "__main__": main()