만드는 중입니다

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

Rise and Fall

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

요약
아주 긴 십진수 문자열이 주어질 때, 앞부분은 감소하지 않고 뒷부분은 증가하지 않도록 나눌 수 있는 수 중 주어진 수 이하인 가장 큰 수를 구한다.
난이도

어려움10점 중 8점

유형
그리디, 문자열, 구현, 수학
정답자
아직 제출이 없습니다

문제

어떤 수의 십진수 표현을 두 부분(빈 부분이어도 된다)으로 나눌 수 있고, 첫 번째 부분의 자릿수가 비감소 순서이고 두 번째 부분의 자릿수가 비증가 순서이면 그 수를 Rise and Fall하다고 한다.

입력으로 주어진 수 이하이면서 Rise and Fall한 수 중 가장 큰 수를 구하라.

입력

첫째 줄에는 정수 tt (1≤t≤1051 \le t \le 10^5)가 주어지며, 이는 테스트 케이스의 수이다.

다음 tt개의 줄에는 각각 정수 nn (1≤n<10100,0001 \le n < 10^{100{,}000})이 주어진다. 각 줄이 하나의 테스트 케이스이다.

  • 참고: 오타가 아니다. 정수는 최대 10510^5자리일 수 있다.

모든 입력 테스트 케이스의 길이의 합은 10510^5을 넘지 않는다.

출력

각 테스트 케이스마다, 해당 테스트 케이스의 nn 이하이면서 Rise and Fall한 수 중 가장 큰 수를 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

    입력
    2
    29041
    56577
    
    예상 출력
    29000
    56555