만드는 중입니다

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

127.0.0.1만 한 곳은 없다

시간 제한2초메모리 제한256 MB

요약
본문의 IPv4 주소를 단일 항목과 겹치지 않는 구간 대응표로 단어로 바꾸고, 대응이 없는 주소는 그대로 둡니다.
난이도

쉬움10점 중 3점

유형
이분 탐색, 정렬, 해시맵
정답자
아직 제출이 없습니다

문제

친구는 문서에서 흔한 영어 단어를 IPv4 주소로 바꿔 쓰는 버릇이 있다. 그 주소를 원래 단어로 되돌리려고 한다. 다행히 단어와 주소를 짝지어 놓은 표를 구했다. 표의 항목 중에는 주소 하나 대신 주소 구간이 적힌 것도 있다.

IPv4 주소는 32비트 부호 없는 정수이고, 보통 점으로 구분한 십진 표기로 쓴다. 예를 들어 172.30.12.255는 8비트 부호 없는 정수 네 개를 점으로 이어 붙인 것이다. 주소를 정수로 볼 때 맨 앞의 수가 최상위 바이트다.

표가 덮는 주소는 표에 적힌 단어로 바꾸고, 나머지 주소는 그대로 둔다.

입력

첫째 줄에 테스트 케이스의 개수 TT (1≤T≤501 \le T \le 50)가 주어진다.

각 테스트 케이스는 표 부분과 본문 부분으로 이루어진다.

표 부분의 첫 줄에는 표 항목의 개수 MM (1≤M≤10001 \le M \le 1000)이 주어진다. 이어지는 MM개의 줄에는 항목이 하나씩 주어지는데, 단어 하나와 IPv4 주소 하나가 오거나 단어 하나와 IPv4 주소 두 개가 온다. 앞의 형태에서는 그 주소 하나만 단어로 바꾼다. 뒤의 형태에서는 두 주소가 만드는 구간에 속하는 모든 주소를 단어로 바꾼다. 구간이 주어질 때 첫 번째 주소는 항상 두 번째 주소보다 작다.

표에 같은 항목이 두 번 나오지는 않는다. 같은 단어가 두 번 나오지 않고, 같은 주소도 두 번 나오지 않으며, 서로 겹치는 구간도 없다. 따라서 주소 하나를 덮는 항목은 많아야 하나다.

본문 부분의 첫 줄에는 본문의 줄 수 NN (1≤N≤10001 \le N \le 1000)이 주어진다. 이어지는 NN개의 줄에는 단어와 IPv4 주소가 최대 20개까지 공백 하나로 구분되어 주어진다. 단어는 영어 알파벳으로만 이루어진다. 주소는 숫자와 점으로만 이루어지고, 각 옥텟은 0 이상 255 이하이며 앞에 0을 덧붙이지 않는다.

출력

각 테스트 케이스마다 본문의 줄을 순서대로 처리한다. 표가 덮는 주소를 그 단어로 바꾼 줄을 출력한다. 대응하는 단어가 없는 주소는 원래 모습 그대로 출력하고, 단어도 바꾸지 않고 출력한다. 한 줄 안의 항목은 공백 하나로 구분해 출력한다.

예제6

  1. 예제 1

    입력
    1
    3
    home 127.0.0.1
    smile 255.255.255.0 255.255.255.255
    gate 10.0.0.1
    4
    There is no place like 127.0.0.1
    Hannibal at the 10.0.0.1
    Let us put a 255.255.255.89 on that face
    I am very very 1.2.3.4
    
    예상 출력
    There is no place like home
    Hannibal at the gate
    Let us put a smile on that face
    I am very very 1.2.3.4
    
  2. 예제 2

    입력
    1
    2
    alpha 8.8.8.8
    beta 1.0.0.0 1.0.0.255
    2
    alpha beta gamma
    8.8.8.9 1.0.1.0 2.2.2.2
    
    예상 출력
    alpha beta gamma
    8.8.8.9 1.0.1.0 2.2.2.2
    
  3. 예제 3

    입력
    1
    1
    mid 192.168.0.10 192.168.0.20
    1
    192.168.0.9 192.168.0.10 192.168.0.15 192.168.0.20 192.168.0.21
    
    예상 출력
    192.168.0.9 mid mid mid 192.168.0.21
    
  4. 예제 4

    입력
    1
    2
    zero 0.0.0.0
    all 0.0.0.1 255.255.255.255
    2
    0.0.0.0 255.255.255.255
    0.0.0.1 128.0.0.0
    
    예상 출력
    zero all
    all all
    
  5. 예제 5

    입력
    1
    4
    one 1.1.1.1
    two 2.2.2.0 2.2.2.9
    three 3.3.3.3
    four 4.0.0.0 4.255.255.255
    2
    one 1.1.1.1 two 2.2.2.5 three 3.3.3.3 four 4.4.4.4 five 5.5.5.5 six 6.6.6.6 seven 7.7.7.7 eight 8.8.8.8 nine 9.9.9.9
    2.2.2.10 4.0.0.0 4.255.255.255 3.3.3.4
    
    예상 출력
    one one two two three three four four five 5.5.5.5 six 6.6.6.6 seven 7.7.7.7 eight 8.8.8.8 nine 9.9.9.9
    2.2.2.10 four four 3.3.3.4
    
  6. 예제 6

    입력
    1
    3
    low 10.0.0.0 10.0.0.255
    high 10.0.1.0 10.0.1.255
    point 10.0.2.0
    1
    10.0.0.255 10.0.1.0 10.0.1.255 10.0.2.0 10.0.2.1
    
    예상 출력
    low high high point 10.0.2.1