만드는 중입니다

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

IP 주소 요약 (큰 입력)

시간 제한5초메모리 제한512 MB

요약
주어진 IPv4 서브넷들을 정확히 같은 주소를 덮는 가장 짧은 정규 서브넷 목록으로 합쳐 정렬합니다.
난이도

보통10점 중 6점

유형
트라이, 비트 연산, 정렬
정답자
아직 제출이 없습니다

문제

IP(Internet Protocol) 주소는 인터넷에 연결된 장치마다 하나씩 부여하는 번호다. 지금은 대부분의 장치가 이 프로토콜의 네 번째 버전(IPv4)을 쓴다. IPv4 주소는 32비트 문자열이다. 보통은 점으로 구분한 십진 표기로 적는다. 0 이상 255 이하의 십진수 네 개를 점으로 이어 쓰고, 이 십진수 하나를 옥텟이라고 부른다. 예를 들어 172.16.254.1이다. 옥텟 하나는 주소의 8비트(1바이트)를 나타낸다. 최상위 비트부터 세어 앞의 8비트가 첫 번째 옥텟, 그다음 8비트가 두 번째 옥텟이고, 나머지도 같은 방식이다.

IP 서브넷 주소는 같은 네트워크에 속한 장치 묶음을 나타낸다. 서브넷 주소는 IP 주소 뒤에 슬래시와 프리픽스 길이를 붙여 적고, 프리픽스 길이는 0 이상 32 이하다. 프리픽스 길이가 P인 서브넷 주소는 주어진 주소와 앞 P비트가 같은 모든 IP 주소를 뜻한다. 예를 들어 10.8.0.0/9는 앞 9비트가 000010100(10.8.0.0의 앞 9비트)인 주소 2232^{23}개, 즉 10.0.0.0부터 10.127.255.255까지를 나타낸다. 10.8.0.0/9와 10.0.0.0/9는 앞 9비트가 같으므로 같은 서브넷을 가리킨다. 그 서브넷 안의 다른 주소를 적어도 마찬가지다.

프리픽스 뒤쪽 비트가 모두 0인 서브넷을 정규화된 서브넷이라고 한다. 예를 들어 10.8.1.0/24와 10.8.1.2/24는 같은 서브넷을 가리키지만 정규화된 쪽은 10.8.1.0/24다. 255.255.255.255/13을 정규화하면 255.248.0.0/13이다.

서브넷 주소 목록이 주어진다. 어떤 IP 주소가 입력의 서브넷 중 하나에 속하는 것과 출력의 서브넷 중 하나에 속하는 것이 서로 같은 조건이 되도록, 정규화된 서브넷으로만 이루어진 가장 짧은 목록을 찾아 정해진 순서대로 출력하라.

입력

첫 줄에 테스트 케이스 수 T가 주어진다. 이어서 T개의 테스트 케이스가 주어진다. 각 테스트 케이스는 서브넷 개수 N이 적힌 줄로 시작하고, 그 뒤에 서브넷 주소가 한 줄에 하나씩 N개 주어진다. 각 서브넷 주소는 A.B.C.D/P 꼴이며, A, B, C, D는 0 이상 255 이하의 정수이고 P는 0 이상 32 이하의 정수다. 0 자체를 빼면 어떤 정수에도 앞자리 0은 없다.

제한

  • 1 ≤ T ≤ 50
  • 1 ≤ N ≤ 10000

출력

각 테스트 케이스마다 먼저 "Case #x:"를 한 줄에 출력한다. 여기서 x는 1부터 시작하는 테스트 케이스 번호다. 그다음 위 조건을 만족하는 서브넷 주소 목록을 한 줄에 하나씩 출력한다. 이 주소는 모두 정규화되어 있어야 하고 순서대로 나열되어 있어야 한다. 주소 X의 첫 번째 정수가 주소 Y의 첫 번째 정수보다 작으면 X가 Y보다 앞선다. 두 주소의 첫 번째 정수가 같으면 두 번째 정수를 비교하고, 그 뒤 정수도 같은 방식으로 비교한다.

문제의 조건에 따라 각 테스트 케이스의 답은 하나로 정해진다.

예제7

  1. 예제 1

    입력
    3
    2
    10.1.2.3/8
    10.2.3.4/17
    2
    10.2.3.4/9
    10.128.2.3/9
    10
    224.147.224.186/18
    58.45.85.53/14
    52.56.134.139/26
    52.227.82.227/22
    83.250.251.44/13
    83.250.12.64/16
    58.40.52.11/14
    52.22.138.56/23
    238.223.58.151/27
    58.32.52.11/13
    
    예상 출력
    Case #1:
    10.0.0.0/8
    Case #2:
    10.0.0.0/8
    Case #3:
    52.22.138.0/23
    52.56.134.128/26
    52.227.80.0/22
    58.32.0.0/12
    83.248.0.0/13
    224.147.192.0/18
    238.223.58.128/27
    
  2. 예제 2

    입력
    1
    3
    0.0.0.0/0
    128.0.0.0/1
    255.255.255.255/32
    
    예상 출력
    Case #1:
    0.0.0.0/0
    
  3. 예제 3

    입력
    1
    2
    0.0.0.0/1
    128.0.0.0/1
    
    예상 출력
    Case #1:
    0.0.0.0/0
    
  4. 예제 4

    입력
    1
    3
    10.0.0.1/32
    10.0.0.2/32
    10.0.0.3/32
    
    예상 출력
    Case #1:
    10.0.0.1/32
    10.0.0.2/31
    
  5. 예제 5

    입력
    2
    2
    0.0.0.0/32
    255.255.255.255/32
    1
    255.255.255.255/13
    
    예상 출력
    Case #1:
    0.0.0.0/32
    255.255.255.255/32
    Case #2:
    255.248.0.0/13
    
  6. 예제 6

    입력
    1
    4
    192.168.1.0/24
    192.168.1.0/24
    192.168.1.77/24
    192.168.0.0/16
    
    예상 출력
    Case #1:
    192.168.0.0/16
    
  7. 예제 7

    입력
    1
    1
    172.16.254.1/32
    
    예상 출력
    Case #1:
    172.16.254.1/32