import sys sys.setrecursionlimit(10**6) N = int(input()) FG = {i:[] for i in range(1,N+1)} for i in range(1,N+1): A = list(map(int,input().split())) for j in range(1,A[0]+1): FG[i].append(A[j]) A = [0]*(N+1) invA = [0]*(N+1) visited = [0]*(N+1) cnt = 1 def dfs1(v): global cnt visited[v] = 1 for u in FG[v]: if visited[u]==0: dfs1(u) A[v] = cnt invA[cnt] = v cnt += 1 for i in range(1,N+1): if visited[i]==0: dfs1(i) BG = {i:[] for i in range(1,N+1)} for i in range(1,N+1): for j in FG[i]: BG[j].append(i) Col = [0]*(N+1) cnt = 1 def dfs2(v,cnt): Col[v] = cnt for u in BG[v]: if Col[u]==0: dfs2(u,cnt) for i in range(N,0,-1): if Col[invA[i]]==0: dfs2(invA[i],cnt) cnt += 1 G = {c:set([]) for c in range(1,cnt)} for i in range(1,N+1): c = Col[i] for j in FG[i]: if Col[j]!=c: G[c].add(Col[j]) if cnt-1==1: print("Yes") else: inDeg = [0]*cnt outDeg = [0]*cnt for c in G: outDeg[c] = len(G[c]) for d in G[c]: inDeg[d] += 1 edge = sum(outDeg) if edge==cnt-2 and inDeg[1:].count(0)==1 and outDeg[1:].count(0)==1: print("Yes") else: print("No")