비밀번호
시간 제한4초메모리 제한512 MB
길이 N 문자열에서 네 가지 조건(길이, 숫자, 특수문자, 대문자 개수)을 모두 만족하는 서로 다른 부분 문자열을 모아 사전순으로 정렬한 뒤 가운데 것을 출력한다.
문제
지훈이는 오랜만에 들어간 사이트의 비밀번호를 잊어버렸다. 그 사이트는 비밀번호를 해시로 저장하기 때문에 예전 비밀번호를 알려주지 못하고, 새 비밀번호를 만들라고 안내했다. 보안 정책이 까다로운 사이트라서 비밀번호는 다음 네 조건을 모두 만족해야 한다.
- 길이가 이상이다.
- 숫자가 글자 이상 들어 있다.
- 특수 문자가 글자 이상 들어 있다. 특수 문자는 숫자도 알파벳도 아닌 문자를 말한다.
- 알파벳 대문자가 글자 이상 들어 있다.
지훈이는 다음 순서로 새 비밀번호를 정한다.
- 알파벳 대소문자, 숫자, 특수 문자
!@#$%^&*()_-중에서 아무 글자나 골라 길이 인 문자열을 하나 쓴다. - 이 문자열의 연속 부분 문자열을 하나씩 살펴보면서, 위 네 조건을 모두 만족하는 것만 후보 목록에 넣는다. 똑같은 문자열이 여러 번 나타나도 후보 목록에는 한 번만 넣는다. 예를 들어
abab에서ab는 후보 목록에 한 개만 들어간다. - 후보 목록을 사전순으로 정렬한다. 문자끼리는 아스키 코드 값으로 비교하고, 한 문자열이 다른 문자열의 앞부분과 완전히 같으면 짧은 쪽이 앞선다.
- 정렬한 후보가 개이고 앞에서부터
candidate[1],candidate[2], ...,candidate[M]이라고 할 때, 번째 후보를 최종 비밀번호로 삼는다.
지훈이가 쓴 길이 의 문자열이 주어진다. 지훈이가 최종적으로 채택하는 비밀번호를 구하라.
입력
첫째 줄에 정수 , , , , 가 공백으로 구분되어 차례대로 주어진다.
둘째 줄에 지훈이가 쓴 길이 의 문자열이 주어진다. 이 문자열은 알파벳 대소문자, 숫자, 특수 문자 !@#$%^&*()_-로만 이루어져 있다.
출력
지훈이가 최종적으로 채택하는 비밀번호를 첫째 줄에 출력한다. 후보가 하나 이상 존재하는 입력만 주어진다.