비밀번호

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

어려움8문자열정렬문자열 매칭투 포인터아직 제출이 없습니다시간 제한4초메모리 제한512 MB

문제

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

  • 길이가 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의 문자열이 주어진다. 이 문자열은 알파벳 대소문자, 숫자, 특수 문자 !@#$%^&*()_-로만 이루어져 있다.

출력

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

제한

  • 1N5000001 \le N \le 500000
  • 1AN1 \le A \le N
  • 0B,C,DN0 \le B, C, D \le N