def solve(): N=int(input()) G=[[None] for _ in range(N)] for i in range(N): G[i]=list(map(int,input().split())) # 結合則 for x in range(N): for y in range(N): for z in range(N): xy=G[x][y] yz=G[y][z] if G[xy][z]!=G[x][yz]: return False # 単位元の存在 e=-1 for x in range(N): if all(G[x][y]==G[y][x]==y for y in range(N)): e=x if e==-1: return False # 逆元の存在 return all(any(G[x][y]==G[y][x]==e for y in range(N)) for x in range(N)) #================================================== print("Yes" if solve() else "No")