세 조각으로 자르기

두 번째 문자열을 비어 있지 않은 세 조각으로 자른 뒤 순서를 바꿔 이어 붙여 첫 번째 문자열을 만들 수 있는지 판정하고, 첫 조각이 가장 짧은 답을 출력한다.

보통5문자열완전 탐색구현면접 대비아직 제출이 없습니다시간 제한0.2초메모리 제한256 MB

문제

문자열 두 개가 주어진다. 두 번째 문자열을 비어 있지 않은 세 조각으로 자른 뒤 세 조각을 원하는 순서로 이어 붙여서 첫 번째 문자열을 만들 수 있는지 판정한다.

각 조각은 두 번째 문자열에서 연속한 부분이고, 이어 붙일 때는 세 조각을 어떤 순서로도 놓을 수 있다.

입력

첫째 줄에 첫 번째 문자열, 둘째 줄에 두 번째 문자열이 주어진다.

두 문자열은 비어 있지 않고, 길이가 서로 같으며, 알파벳 소문자로만 이루어져 있다. 길이는 50005\,000 이하이다. 각 알파벳이 나오는 횟수는 두 문자열에서 같다.

출력

첫 번째 문자열을 만들 수 있으면 첫째 줄에 YES를 출력하고, 다음 세 줄에 세 조각을 첫 번째 문자열이 되는 순서대로 한 줄에 하나씩 출력한다. 세 조각은 모두 비어 있지 않아야 한다. 만들 수 없으면 첫째 줄에 NO만 출력한다.

자르는 방법이 여러 가지면 첫 번째 조각이 가장 짧은 방법을 출력한다. 그런 방법이 여럿이면 그중에서 두 번째 조각이 가장 짧은 방법을 출력한다.