from __future__ import print_function
from sys import stdin

def printf(str, *args):
    print(str % args, end='')

domain = 20         # 관계행렬의 크기를 위한 상수

# matrixout 함수가 행렬 mx를 출력
def matrixout(mx):
    print()
    print("\u250c                                                              \u2510")

    for i in range(0, domain):
        print("| ", end = "")
        for j in range(0, domain):
            print("%2.f" % mx[i][j], end = " ")
        printf(" |\n")
        print("\u2514                                                              \u2518")

# readfile 함수가 텍스트 파일에서 관계를 읽고 adjacency에 대입
def readfile(fn, adjacency):
    adjacencymx = [[0 for j in range(len(adjacency[0]))] for i in range(len(adjacency))]
    fp = open(fn, 'r')
    # 집합 A를 출력
    print("A = { ", end = "")
    for i in range(1, domain + 1):
        print(i, end = ", ")
    print("\b\b }\n")
    lines = fp.readlines()      # 줄별로 파일을 읽고 lines에 대입
    
    # lines에서의 관계를 adjacency에 대입하고 집합 A에 대한 관계 R을 출력
    print("R = { ", end = "")
    for line in lines:
        values = line.strip('\n').split()
        x = int(values[0])
        y = int(values[1])

        adjacencymx[x][y] = 1
        
        print("(%2d, %2d)," %(x,y), end = " ")
    print("\b\b }")
    fp.close()
    return adjacencymx

fn = "pp5-3.dat"            # 텍스트 파일 이름
# 관계(부울)행렬을 위한 2차원 배열 정의 및 초기화
adjacencymx = [[0 for j in range(domain+1)] for i in range(domain+1)]

print()
# 텍스트 파일에서 읽은 관계들로 이루어진 관계행렬을 대입
adjacencymx = readfile(fn, adjacencymx)
 
matrixout(adjacencymx) # printing matrix

printf("\n\n")

reflexivity = 1
# 관계행렬이 반사관계 여부를 확인 
for i in range(1, domain+1):
    # iRi가 없으면 바로 반복문을 멈춤
    if adjacencymx[i][i] == 0:
        reflexivity = 0
        break

# 반사관계 여부를 출력 
if reflexivity == 1:
    printf("%2cR은 반사관계이다.\n"%' ')
else:
    printf("%2cR은 반사관계가 아니다.\n"%' ')

symmetry = 1
test = 1
# 관계행렬이 대칭관계 여부를 확인 
for i in range(1, domain+1):
    for j in range(1, domain+1):
        # iRj가 있을 때 jRi가 없으면 바로 반복문을 멈춤
        if adjacencymx[i][j] == 1 and adjacencymx[j][i] == 0:
            symmetry = 0
            test = 0
            break
    if test == 0:
        break

# 대칭관계 여부를 출력
if symmetry ==1:
    printf("%2cR은 대칭관계이다.\n"%' ')
else:
    printf("%2cR은 대칭관계가 아니다.\n"%' ')

transitivity = 1
test = 1
# 관계행렬이 추이관계 여부를 확인 
for i in range(1, domain+1):
    for j in range(1, domain+1):
        if adjacencymx[i][j] == 1:
            for k in range(1,6):
                # iRj와 jRk가 있을 때, iRk가 없으면 바로 반복문을 멈춤
                if adjacencymx[j][k] == 1 and adjacencymx[i][k] == 0:
                    transitivity = 0
                    test = 0
                    break
            if test == 0:
                break

    if test == 0:
        break

# 추이관계 여부를 출력
if transitivity == 1:
    printf("%2cR은 추이관계이다.\n"%' ')
else:
    printf("%2cR은 추이관계가 아니다.\n"%' ')

print()
