class Dice:

    def __init__(self):

        self.side = {"top": 0, "front": 0, "right": 0, "left": 0, "back": 0, "bottom": 0}



    # サイコロを東西南北、どちらか一方に転がした時、それぞれの面の変化

    def roll(self, direction):

        self.direction = direction

        if self.direction == "N":

            w = self.side["top"]

            self.side["top"] = self.side["front"]

            self.side["front"] = self.side["bottom"]

            self.side["bottom"] = self.side["back"]

            self.side["back"] = w

        elif self.direction == "S":

            w = self.side["top"]

            self.side["top"] = self.side["back"]

            self.side["back"] = self.side["bottom"]

            self.side["bottom"] = self.side["front"]

            self.side["front"] = w

        elif self.direction == "E":

            w = self.side["top"]

            self.side["top"] = self.side["left"]

            self.side["left"] = self.side["bottom"]

            self.side["bottom"] = self.side["right"]

            self.side["right"] = w

        elif self.direction == "W":

            w = self.side["top"]

            self.side["top"] = self.side["right"]

            self.side["right"] = self.side["bottom"]

            self.side["bottom"] = self.side["left"]

            self.side["left"] = w



    # サイコロの目を作成

    def create(self):

        for s, n in zip(dice.side, input().split()):

            dice.side[s] = int(n)



def simulation():

    for line in a:

        dir = random.sample("NSEW"*5, 20)

        for direction in dir:

            dice.roll(direction)

            if dice.side == line:

                return "No"

    else:

        a.append(dict(dice.side))



import random

n = int(eval(input()))

dice = Dice()

dice.create()

a = []; a.append(dict(dice.side))

    

for i in range(1, n):

    dice.create()

    judge = simulation()

    if judge == "No":

        print("No")

        break

else:

    print("Yes")



class Dice:

    def __init__(self):

        self.side = {"top": 0, "front": 0, "right": 0, "left": 0, "back": 0, "bottom": 0}



    # サイコロを東西南北、どちらか一方に転がした時、それぞれの面の変化

    def roll(self, direction):

        self.direction = direction

        if self.direction == "N":

            w = self.side["top"]

            self.side["top"] = self.side["front"]

            self.side["front"] = self.side["bottom"]

            self.side["bottom"] = self.side["back"]

            self.side["back"] = w

        elif self.direction == "S":

            w = self.side["top"]

            self.side["top"] = self.side["back"]

            self.side["back"] = self.side["bottom"]

            self.side["bottom"] = self.side["front"]

            self.side["front"] = w

        elif self.direction == "E":

            w = self.side["top"]

            self.side["top"] = self.side["left"]

            self.side["left"] = self.side["bottom"]

            self.side["bottom"] = self.side["right"]

            self.side["right"] = w

        elif self.direction == "W":

            w = self.side["top"]

            self.side["top"] = self.side["right"]

            self.side["right"] = self.side["bottom"]

            self.side["bottom"] = self.side["left"]

            self.side["left"] = w



    # サイコロの目を作成

    def create(self):

        for s, n in zip(dice.side, input().split()):

            dice.side[s] = int(n)



# ランダムに東西南北を出現し、シュミレーションする

def simulation():

    for line in a:

        dir = random.sample("NSEW"*5, 20) # サンプル数は２０個

        for direction in dir:

            dice.roll(direction)

            # サイコロが同一なら、"NO"を返す。

            if dice.side == line:

                return "No"

    else:

        a.append(dict(dice.side)) # 同一のサイコロがないなら、比較候補のリストに追加する。



import random

n = int(eval(input()))

dice = Dice()



# 最初のサイコロの目を作成して、比較候補のリストに追加する。

dice.create()

a = []; a.append(dict(dice.side))

    

for i in range(1, n):

    dice.create()

    judge = simulation()

    # 同一のサイコロがあったら、"No"を出力して、処理を終了する。

    if judge == "No":

        print("No")

        break

# すべての比較候補と同一のサイコロがないなら、"Yes"を出力して、処理を終了する。

else:

    print("Yes")



class Dice:
    def __init__(self):
        self.side = {
            "top": 0,
            "front": 0,
            "right": 0,
            "left": 0,
            "back": 0,
            "bottom": 0,
        }

    # サイコロを東西南北、どちらか一方に転がした時、それぞれの面の変化
    def roll(self, direction):
        self.direction = direction
        if self.direction == "N":
            w = self.side["top"]
            self.side["top"] = self.side["front"]
            self.side["front"] = self.side["bottom"]
            self.side["bottom"] = self.side["back"]
            self.side["back"] = w
        elif self.direction == "S":
            w = self.side["top"]
            self.side["top"] = self.side["back"]
            self.side["back"] = self.side["bottom"]
            self.side["bottom"] = self.side["front"]
            self.side["front"] = w
        elif self.direction == "E":
            w = self.side["top"]
            self.side["top"] = self.side["left"]
            self.side["left"] = self.side["bottom"]
            self.side["bottom"] = self.side["right"]
            self.side["right"] = w
        elif self.direction == "W":
            w = self.side["top"]
            self.side["top"] = self.side["right"]
            self.side["right"] = self.side["bottom"]
            self.side["bottom"] = self.side["left"]
            self.side["left"] = w

    # サイコロの目を作成
    def create(self):
        for s, n in zip(dice.side, input().split()):
            dice.side[s] = int(n)


def simulation():
    for line in a:
        dir = random.sample("NSEW" * 5, 20)
        for direction in dir:
            dice.roll(direction)
            if dice.side == line:
                return "No"
    else:
        a.append(dict(dice.side))


import random

n = int(eval(input()))
dice = Dice()
dice.create()
a = []
a.append(dict(dice.side))
for i in range(1, n):
    dice.create()
    judge = simulation()
    if judge == "No":
        print("No")
        break
else:
    print("Yes")

class Dice:
    def __init__(self):
        self.side = {
            "top": 0,
            "front": 0,
            "right": 0,
            "left": 0,
            "back": 0,
            "bottom": 0,
        }

    # サイコロを東西南北、どちらか一方に転がした時、それぞれの面の変化
    def roll(self, direction):
        self.direction = direction
        if self.direction == "N":
            w = self.side["top"]
            self.side["top"] = self.side["front"]
            self.side["front"] = self.side["bottom"]
            self.side["bottom"] = self.side["back"]
            self.side["back"] = w
        elif self.direction == "S":
            w = self.side["top"]
            self.side["top"] = self.side["back"]
            self.side["back"] = self.side["bottom"]
            self.side["bottom"] = self.side["front"]
            self.side["front"] = w
        elif self.direction == "E":
            w = self.side["top"]
            self.side["top"] = self.side["left"]
            self.side["left"] = self.side["bottom"]
            self.side["bottom"] = self.side["right"]
            self.side["right"] = w
        elif self.direction == "W":
            w = self.side["top"]
            self.side["top"] = self.side["right"]
            self.side["right"] = self.side["bottom"]
            self.side["bottom"] = self.side["left"]
            self.side["left"] = w

    # サイコロの目を作成
    def create(self):
        for s, n in zip(dice.side, input().split()):
            dice.side[s] = int(n)


# ランダムに東西南北を出現し、シュミレーションする
def simulation():
    for line in a:
        dir = random.sample("NSEW" * 5, 20)  # サンプル数は２０個
        for direction in dir:
            dice.roll(direction)
            # サイコロが同一なら、"NO"を返す。
            if dice.side == line:
                return "No"
    else:
        a.append(dict(dice.side))  # 同一のサイコロがないなら、比較候補のリストに追加する。


import random

n = int(eval(input()))
dice = Dice()
# 最初のサイコロの目を作成して、比較候補のリストに追加する。
dice.create()
a = []
a.append(dict(dice.side))
for i in range(1, n):
    dice.create()
    judge = simulation()
    # 同一のサイコロがあったら、"No"を出力して、処理を終了する。
    if judge == "No":
        print("No")
        break
# すべての比較候補と同一のサイコロがないなら、"Yes"を出力して、処理を終了する。
else:
    print("Yes")

+# ランダムに東西南北を出現し、シュミレーションする -        dir = random.sample("NSEW" * 5, 20) +        dir = random.sample("NSEW" * 5, 20)  # サンプル数は２０個 +            # サイコロが同一なら、"NO"を返す。 -        a.append(dict(dice.side)) +        a.append(dict(dice.side))  # 同一のサイコロがないなら、比較候補のリストに追加する。 +# 最初のサイコロの目を作成して、比較候補のリストに追加する。 +    # 同一のサイコロがあったら、"No"を出力して、処理を終了する。 +# すべての比較候補と同一のサイコロがないなら、"Yes"を出力して、処理を終了する。