output_description: If there exists a set of values (x_1, x_2, ..., x_N) that is consistent with
  all given pieces of information, print `Yes`; if it does not exist, print
  `No`.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      N M
      L_1 R_1 D_1
      L_2 R_2 D_2
      :
      L_M R_M D_M
attempt: n, m = map(int, input().split())
  groups = []
  wgroup = [-1] * (n + 1)
  dist = [-1] * (n + 1)
  newgroupid = 0
  er = False
  for i in range(m):
      l, r, d = map(int, input().split())
      if er:
          pass
      else:
          if wgroup[l] == -1 and wgroup[r] == -1:  # l and r no group
              agroup = set()
              agroup.add(l)
              agroup.add(r)
              dist[l] = 0
              dist[r] = d
              groups.append(agroup)
              wgroup[l] = newgroupid
              wgroup[r] = newgroupid
              newgroupid += 1
          elif wgroup[l] != -1 and wgroup[r] == -1:  # r to l-group
              groups[wgroup[l]].add(r)
              dist[r] = dist[l] + d
              wgroup[r] = wgroup[l]
          elif wgroup[l] == -1 and wgroup[r] != -1:  # l to r-group
              groups[wgroup[r]].add(l)
              dist[l] = dist[r] - d
              wgroup[l] = wgroup[r]
          else:
              if wgroup[l] == wgroup[r]:  # 同じグループである。
                  if d != dist[r] - dist[l]:
                      er = True
              else:
                  if len(groups[wgroup[l]]) >= len(groups[wgroup[r]]):
                      diff = (dist[l] + d) - dist[r]
                      for c in groups[wgroup[r]]:
                          dist[c] += diff
                          wgroup[c] = wgroup[r]
                      newset = groups[wgroup[l]] | groups[wgroup[r]]
                      groups[wgroup[l]] = newset
                  else:
                      diff = (dist[r] - d) - dist[l]
                      for c in groups[wgroup[l]]:
                          dist[c] += diff
                          wgroup[c] = wgroup[l]
                      newset = groups[wgroup[l]] | groups[wgroup[r]]
                      groups[wgroup[r]] = newset
  for gr in groups:  # 各グループの位置最小、最大の差が10**9以内か?
      if er:
          pass
      else:
          tmin = 9999999999
          tmax = 0
          for c in gr:
              tmin = min(tmin, dist[c])
              tmax = max(tmax, dist[c])
          if tmax - tmin > 10**9:
              er = True
          # else:print('dist ok')
  print("No" if er else "Yes")
  
problem_description: Statement
  
  There are N people standing on the x-axis. Let the coordinate of Person i be
  x_i. For every i, x_i is an integer between 0 and 10^9 (inclusive). It is
  possible that more than one person is standing at the same coordinate.
  
  You will given M pieces of information regarding the positions of these
  people. The i-th piece of information has the form (L_i, R_i, D_i). This means
  that Person R_i is to the right of Person L_i by D_i units of distance, that
  is, x_{R_i} - x_{L_i} = D_i holds.
  
  It turns out that some of these M pieces of information may be incorrect.
  Determine if there exists a set of values (x_1, x_2, ..., x_N) that is
  consistent with the given pieces of information.
samples: [{"input": "3 3\n    1 2 1\n    2 3 1\n    1 3 2", "output": "Yes\n    \n\nSome possible sets of values (x_1, x_2, x_3) are (0, 1, 2) and (101, 102,\n103).\n\n* * *"}, {"input": "3 3\n    1 2 1\n    2 3 1\n    1 3 5", "output": "No\n    \n\nIf the first two pieces of information are correct, x_3 - x_1 = 2 holds, which\nis contradictory to the last piece of information.\n\n* * *"}, {"input": "4 3\n    2 1 1\n    2 3 5\n    3 4 2", "output": "Yes\n    \n\n* * *"}, {"input": "10 3\n    8 7 100\n    7 9 100\n    9 8 100", "output": "No\n    \n\n* * *"}, {"input": "100 0", "output": "Yes"}]