메가바이러스

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

요약
이진 트리에서 세대 k에 속한 n개의 바이러스 번호가 주어질 때, 주어진 모든 바이러스의 공통 조상이 존재하는 가장 깊은 세대를 구한다.
난이도

보통10점 중 4점

유형
트리, 비트 연산, 수학, 완전 탐색
정답자
아직 제출이 없습니다

문제

해커가 메가바이러스를 만들었습니다. 바이러스의 각 복사본에는 고유한 번호가 있으며, 맨 처음 복사본의 번호는 00입니다. 매 분마다 새로운 세대의 바이러스가 만들어집니다. 세대 kk에 있는 번호 ii인 바이러스는 세대 k+1k + 1에 번호가 2⋅i2 \cdot i와 2⋅i+12 \cdot i + 1인 두 바이러스(자식)를 만듭니다. 이렇게 새로 생긴 두 바이러스 2⋅i2 \cdot i, 2⋅i+12 \cdot i + 1을 세대 kk의 바이러스 ii의 자식이라고 부릅니다. 바이러스 vv와 그 자식, 자식의 자식 등을 모두 합쳐 바이러스 vv의 자손이라 하고(바이러스 vv 자신도 자손에 포함됩니다), vv를 그들의 조상이라고 부릅니다. 즉, 모든 바이러스는 자기 자신의 조상이기도 합니다. 세대 번호는 00부터 시작합니다. 각 세대에 존재하는 바이러스의 번호는 다음과 같습니다.

  • 세대 00: 바이러스 00
  • 세대 11: 바이러스 00, 11
  • 세대 22: 바이러스 00, 11, 22, 33
  • 세대 33: 바이러스 00, 11, 22, 33, 44, 55, 66, 77
  • ...

세대 번호 하나와 그 세대에 속한 여러 바이러스의 번호가 주어질 때, 주어진 모든 바이러스의 공통 조상을 포함하는 가장 큰 세대 번호를 구해서 출력하는 프로그램을 작성하세요.

입력

첫째 줄에 두 정수 kk와 nn이 공백으로 구분되어 주어집니다. kk (1≤k≤5121 \le k \le 512)는 세대 번호이고, nn (1≤n≤1501 \le n \le 150)은 읽어들일 바이러스의 개수입니다. 이어지는 nn개의 줄에는 각 줄마다 바이러스의 번호가 하나씩 주어집니다. 모든 바이러스는 세대 kk에 속하므로, 각 번호는 00 이상 2k−12^k - 1 이하의 정수입니다.

출력

주어진 모든 바이러스의 공통 조상을 포함하는 가장 큰 세대 번호를 한 줄에 출력합니다.

예제2

  1. 예제 1

    입력
    2 2
    1
    2
    
    예상 출력
    0
    
  2. 예제 2

    입력
    3 2
    4
    5
    
    예상 출력
    2