만드는 중입니다

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

비밀번호

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

요약
길이 N 문자열에서 네 가지 조건(길이, 숫자, 특수문자, 대문자 개수)을 모두 만족하는 서로 다른 부분 문자열을 모아 사전순으로 정렬한 뒤 가운데 것을 출력한다.
난이도

어려움10점 중 8점

유형
문자열, 정렬, 문자열 매칭, 투 포인터
정답자
아직 제출이 없습니다

문제

지훈이는 오랜만에 들어간 사이트의 비밀번호를 잊어버렸다. 그 사이트는 비밀번호를 해시로 저장하기 때문에 예전 비밀번호를 알려주지 못하고, 새 비밀번호를 만들라고 안내했다. 보안 정책이 까다로운 사이트라서 비밀번호는 다음 네 조건을 모두 만족해야 한다.

  • 길이가 AA 이상이다.
  • 숫자가 BB글자 이상 들어 있다.
  • 특수 문자가 CC글자 이상 들어 있다. 특수 문자는 숫자도 알파벳도 아닌 문자를 말한다.
  • 알파벳 대문자가 DD글자 이상 들어 있다.

지훈이는 다음 순서로 새 비밀번호를 정한다.

  1. 알파벳 대소문자, 숫자, 특수 문자 !@#$%^&*()_- 중에서 아무 글자나 골라 길이 NN인 문자열을 하나 쓴다.
  2. 이 문자열의 연속 부분 문자열을 하나씩 살펴보면서, 위 네 조건을 모두 만족하는 것만 후보 목록에 넣는다. 똑같은 문자열이 여러 번 나타나도 후보 목록에는 한 번만 넣는다. 예를 들어 abab에서 ab는 후보 목록에 한 개만 들어간다.
  3. 후보 목록을 사전순으로 정렬한다. 문자끼리는 아스키 코드 값으로 비교하고, 한 문자열이 다른 문자열의 앞부분과 완전히 같으면 짧은 쪽이 앞선다.
  4. 정렬한 후보가 MM개이고 앞에서부터 candidate[1], candidate[2], ..., candidate[M]이라고 할 때, ⌊(M+1)/2⌋\lfloor (M+1)/2 \rfloor번째 후보를 최종 비밀번호로 삼는다.

지훈이가 쓴 길이 NN의 문자열이 주어진다. 지훈이가 최종적으로 채택하는 비밀번호를 구하라.

입력

첫째 줄에 정수 NN, AA, BB, CC, DD가 공백으로 구분되어 차례대로 주어진다.

둘째 줄에 지훈이가 쓴 길이 NN의 문자열이 주어진다. 이 문자열은 알파벳 대소문자, 숫자, 특수 문자 !@#$%^&*()_-로만 이루어져 있다.

출력

지훈이가 최종적으로 채택하는 비밀번호를 첫째 줄에 출력한다. 후보가 하나 이상 존재하는 입력만 주어진다.

제한

  • 1≤N≤5000001 \le N \le 500000
  • 1≤A≤N1 \le A \le N
  • 0≤B,C,D≤N0 \le B, C, D \le N

예제3

  1. 예제 1

    입력
    10 9 1 0 1
    h4llowOrld
    
    예상 출력
    h4llowOrl
    
  2. 예제 2

    입력
    1 1 0 0 0
    a
    
    예상 출력
    a
    
  3. 예제 3

    입력
    5 2 0 0 0
    aaaaa
    
    예상 출력
    aaa