# 입력 파일 형식:
# 첫 번째 줄          -> 집합 A의 원소
# 두 번째 줄          -> 집합 B의 원소
# 다음으로 집합 A에서 집합 B로의 관계들 : (예): 
# 세 번째 줄          -> a 5
# 네 번째 줄          -> b 2
# .........
# 입력 데이터가 맞는 함수라고 가정하고 단사함수 여부를 판단하는 프로그램

from __future__ import print_function
from sys import stdin

A = []          # 집합 A를 위한 배열 정의
B = []          # 집합 B를 위한 배열 정의

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

# setout 함수가 집합을 출력 
def setout(A):
    count = 0
    if len(A) == 0:
        print("\u2205")
        return
    printf("{")
    for i in range(0,len(A)):
       if count != 0:
           printf(",")
       printf("%2c"%A[i])
       count = 1
    
    printf(" }\n")

# readfile 함수가 텍스트 파일에서 이항관계를 읽고 단사함수 여부를 반환
def readfile(fn): 
    global A, B                          # 전역 변수(A와 B)에 접근 
    isInjective = True
    fp = open(fn, 'r')                   # 파일 열기                   
    printf("\n%5cf%d={"%(' ',1))
    lines = fp.readlines()               # 줄별로 파일을 읽고 lines에 대입
    A = lines[0].strip('\n').split()     # 첫 번째 줄을 A에 대입
    B = lines[1].strip('\n').split()     # 두 번째 줄을 B에 대입
    B_hash = [0] * len(B)

    index = 2                   # lines의 세 번째 줄부터 읽기 위한 인덱스 

    i=0
    for index in range(2, len(lines)):
        if index < len(lines) - 1:
            values = lines[index].strip('\n').split()
            printf("(%c, %c)," %(values[0],values[1]))      # 관계를 출력
            if values[1] in B:
                # 이항관계의 두 번째 원소가 공역에서 두 번 이상 나타나면 
                if B_hash[B.index(values[1])] == 1:
                    isInjective = False
                B_hash[B.index(values[1])] = 1

    values = lines[index].strip('\n').split()
    printf("(%c, %c)" %(values[0],values[1]))
    fp.close()
    return isInjective


fn = "pp6-2.dat"    # 입력 파일 이름
fp = open(fn, 'r')
lines = fp.readlines()
# 집합 2개를 파일에서 읽고 A와 B에 대입
A = lines[0].strip('\n').split()
B = lines[1].strip('\n').split()
fp.close()

# 집합들을 출력
print("\n     A = ", end = "")
setout(A)
print("\n     B = ", end = "")
setout(B)

print("\n     집합 A에서 집합 B로의 관계 f1은 다음과 같다.:")
isInjective = readfile(fn)
printf("}\n\n")


# 이항관계가 단사함수인지 아닌지 출력
if isInjective == True:
    print(" 주어진 관계가 단사함수이다!\n")
else :
    print(" 주어진 관계가 단사함수가 아니다!\n")
