만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

부정행위 검사

시간 제한1초메모리 제한2048 MB

요약
두 코드 제출물이 단어 단위 이름 바꾸기만으로 같아지는지 판별하고, 같다면 정렬된 바꾸기 목록을 출력합니다.
난이도

보통10점 중 5점

유형
해시맵, 문자열, 구현
정답자
아직 제출이 없습니다

문제

첫 번째 프로그래밍 과정(FPC) 시험은 성공적이었다. 모든 학생이 우수한 성적으로 합격했다. 사실 성적이 너무 좋아서 오히려 의심스러울 정도다. 부정행위 검사가 필요하지만, 수백 개의 제출 코드를 일일이 살펴볼 사람이 없다. 그래서 구조가 비슷한 코드 제출을 찾는 일이 주어졌다. 두 코드의 차이가 일부 변수의 이름 변경뿐이라면 부정행위 보고서를 작성해야 한다.

더 정확히 말하면, 단어 치환을 순서대로 적용해서 한 코드를 다른 코드와 동일하게 만들 수 있을 때 두 코드는 similar하다. 각 단어 치환은 단어의 모든 출현을 바꾼다. 치환은 완전한 단어에만 적용할 수 있다. 단어 사이의 공백과 줄의 앞뒤 공백은 무시하지만, 줄바꿈은 무시하지 않는다. 두 코드가 similar하려면 같은 번호의 줄마다 단어 개수가 같아야 한다.

두 코드가 주어졌을 때 similar한지 판단하라. similar하면 정렬된 단어 치환 목록이 담긴 부정행위 보고서를 출력하라.

입력

입력은 다음과 같다.

각 코드 제출의 줄 수를 나타내는 정수 nn (1≤n≤10001\leq n\leq 1000)이 한 줄에 주어진다.

첫 번째 제출 코드의 nn 줄.

두 번째 제출 코드의 nn 줄.

코드의 각 줄은 공백( ), 영문자(A-Z, a-z), 숫자(0-9), 밑줄(_)만으로 이루어진다. 각 줄은 줄바꿈 문자를 제외하고 1자 이상 120자 이하이다.

출력

두 코드가 similar하지 않으면 -1을 출력한다.

두 코드가 similar하면 다음을 출력한다.

단어 치환의 개수 rr (0 이상의 정수)을 한 줄에 출력한다.

단어 치환 rr개를 한 줄에 하나씩 출력한다. 각 줄은 공백으로 구분된 두 단어이다. 목록은 ASCII 값 기준 사전순으로 정렬한다.

예제3

  1. 예제 1

    입력
    4
    i is 42
    while i
        subtract i
    print i
    j is 1337
    while j
        add j
    print j
    
    예상 출력
    3
    42 1337
    i j
    subtract add
    
  2. 예제 2

    입력
    3
    ans is 42
    if ans is 42
        print ans
    ans is 42
    if ans is not 42
        print ans
    
    예상 출력
    -1
    
  3. 예제 3

    입력
    2
    ans is 42
    print items
    ans is 42
    print ans
    
    예상 출력
    -1