IP 주소 요약 (큰 입력)
시간 제한5초메모리 제한512 MB
주어진 IPv4 서브넷들을 정확히 같은 주소를 덮는 가장 짧은 정규 서브넷 목록으로 합쳐 정렬합니다.
문제
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비트)인 주소 개, 즉 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보다 앞선다. 두 주소의 첫 번째 정수가 같으면 두 번째 정수를 비교하고, 그 뒤 정수도 같은 방식으로 비교한다.
문제의 조건에 따라 각 테스트 케이스의 답은 하나로 정해진다.