아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

화환

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

요약
0과 1로 이루어진 문자열에서 원소를 지워, 각 1의 왼쪽 연속 0의 개수와 오른쪽 연속 0의 개수가 같아지는 아름다운 목걸이를 가장 길게 만든다.
난이도

어려움10점 중 8점

유형
동적 계획법, 문자열, 구현, 그리디
정답자
아직 제출이 없습니다

문제

화환은 깃발과 구슬을 원소로 하는 사슬이며, 깃발을 적어도 하나 포함한다. 화환의 길이는 화환을 이루는 원소의 개수이다.

화환이 아름답다는 것은 각 깃발에 대해, 그 깃발의 왼쪽에서 가장 가까운 왼쪽 깃발까지(그런 깃발이 없으면 화환의 시작까지) 연속해 있는 구슬의 개수와, 그 깃발의 오른쪽에서 가장 가까운 오른쪽 깃발까지(그런 깃발이 없으면 화환의 끝까지) 연속해 있는 구슬의 개수가 같은 것을 말한다.

구슬을 0, 깃발을 1로 나타내자. 예를 들어 화환 0001000은 아름답고, 화환 001010은 아름답지 않다. 첫 번째 깃발의 왼쪽에는 구슬이 둘, 오른쪽에는 구슬이 하나이기 때문이다. 000은 깃발을 하나도 포함하지 않으므로 화환이 아니다.

화환이 주어질 때, 그 원소 중 일부를 지울 수 있다.

주어진 화환에서 원소를 지워 얻을 수 있는 가장 긴 아름다운 화환을 구하는 프로그램을 작성하라.

입력

첫째 줄에는 원래 화환의 원소 개수 nn이 주어진다 (1≤n≤500 0001 \leq n \leq 500\,000).

둘째 줄에는 0과 1로 이루어진 길이 nn의 문자열로 화환의 설명이 주어진다. 문자열은 1을 적어도 하나 포함한다.

출력

첫째 줄에는 얻은 아름다운 화환의 길이 mm을 출력한다 (1≤m≤n1 \leq m \leq n).

둘째 줄에는 얻은 아름다운 화환을 출력한다.

답이 여러 개라면 그중 아무거나 출력한다.

예제3

  1. 예제 1

    입력
    10
    0100100000
    
    예상 출력
    7
    0001000
    
  2. 예제 2

    입력
    3
    111
    
    예상 출력
    3
    111
    
  3. 예제 3

    입력
    7
    0100101
    
    예상 출력
    5
    01010