# DFS(再帰） v:頂点
def DFS(v,dis,fin):
  global time
  # 訪問したので発見時刻を記入
  dis[v] = time
  time += 1
  
  # vに隣接している頂点をみる
  for u in V[v]:
    if dis[u] is None:
      DFS(u,dis,fin)
  
  # 処理が完了したので完了時刻を記入
  fin[v] = time
  time += 1
  
n = int(input())
# 0番目を始点として初期化
V = [[i for i in range(n)]]

for i in range(n):
  _, __, *a = map(int, input().split())
  V.append(a)

dis = [None]*(n+1)# 頂点を発見した時刻
fin = [None]*(n+1)# 頂点の完了時刻
time = 0
DFS(0,dis,fin)

for i in range(1,n+1):
  print(i, dis[i], fin[i]) def DFS(v,dis,fin):
  global time
  # 訪問したので発見時刻を記入
  dis[v] = time
  time += 1
  
  # vに隣接している頂点をみる
  for u in V[v]:
    if dis[u] is None:
      DFS(u,dis,fin)
  
  # 処理が完了したので完了時刻を記入
  fin[v] = time
  time += 1
   DFS global time dis[v] = time dis[v] dis v time time += 1 time 1 for u in V[v]:
    if dis[u] is None:
      DFS(u,dis,fin)
  
  # 処理が完了したので完了時刻を記入
   u V[v] V v if dis[u] is None:
      DFS(u,dis,fin)
  
  # 処理が完了したので完了時刻を記入
   dis[u] is None dis[u] dis u None DFS(u,dis,fin) DFS u dis fin fin[v] = time fin[v] fin v time time += 1 time 1 v v dis dis fin fin n = int(input()) n int(input()) int input() input i for i in range(n) for i in range(n) i range(n) range n for i in range(n) i V = [[i for i in range(n)]] V [[i for i in range(n)]] [i for i in range(n)] for i in range(n):
  _, __, *a = map(int, input().split())
  V.append(a) i range(n) range n _, __, *a = map(int, input().split()) _ map(int, input().split()) map int input().split() ().split () input split __ *a a V.append(a) V.append V append a dis = [None]*(n+1) dis [None]*(n+1) [None] None n+1 n 1 fin = [None]*(n+1) fin [None]*(n+1) [None] None n+1 n 1 time = 0 time 0 DFS(0,dis,fin) DFS 0 dis fin for i in range(1,n+1):
  print(i, dis[i], fin[i]) i range(1,n+1) range 1 n+1 n 1 print(i, dis[i], fin[i]) print i dis[i] dis i fin[i] fin i time = 0 0 time def DFS(v,dis,fin):
  global time
  # 訪問したので発見時刻を記入
  dis[v] = time
  time += 1
  
  # vに隣接している頂点をみる
  for u in V[v]:
    if dis[u] is None:
      DFS(u,dis,fin)
  
  # 処理が完了したので完了時刻を記入
  fin[v] = time
  time += 1
   def DFS(v,dis,fin):
  global time
  # 訪問したので発見時刻を記入
  dis[v] = time
  time += 1
  
  # vに隣接している頂点をみる
  for u in V[v]:
    if dis[u] is None:
      DFS(u,dis,fin)
  
  # 処理が完了したので完了時刻を記入
  fin[v] = time
  time += 1
   DFS n = int(input()) int(input()) n V = [[i for i in range(n)]] [[i for i in range(n)]] V dis = [None]*(n+1) [None]*(n+1) dis fin = [None]*(n+1) [None]*(n+1) fin _, __, *a = map(int, input().split()) map(int, input().split()) _
# DFS(再帰） v:頂点
def DFS(v,dis,fin):
  global time
  # 訪問したので発見時刻を記入
  dis[v] = time
  time += 1
  
  # vに隣接している頂点をみる
  for u in V[v]:
    if dis[u] is None:
      DFS(u,dis,fin)
  
  # 処理が完了したので完了時刻を記入
  fin[v] = time
  time += 1
  
n = int(input())
# 0番目を始点として初期化
V = [[i for i in range(n)]]

for i in range(n):
  _, __, *a = map(int, input().split())
  V.append(a)

dis = [None]*(n+1)# 頂点を発見した時刻
fin = [None]*(n+1)# 頂点の完了時刻
time = 0
DFS(0,dis,fin)

for i in range(1,n+1):
  print(i, dis[i], fin[i])
