바이너리 문자열 토글

모두 0인 이진 문자열에 U번의 구간 뒤집기 연산을 적용한 뒤, U+1개 상태 중 사전순으로 가장 큰 문자열을 출력한다.

보통7누적 합그리디구현면접 대비아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

길이가 NN이고 모든 문자가 0인 바이너리 문자열 S0S_0이 있다. 이 문자열에 변경 연산을 UU번 적용한다. ii번째 연산은 Si1S_{i-1}SiS_i로 바꾸는 연산이므로, UU번의 연산이 모두 끝나면 문자열은 SUS_U가 된다.

ii번째 연산은 두 정수 LiL_iRiR_i로 주어진다. 이 연산은 구간 [Li,Ri][L_i, R_i]에 속하는 모든 문자를 뒤집는다. 즉, 양 끝을 포함한 이 구간 안에서 1은 0이 되고 0은 1이 된다.

연산을 모두 적용하면 문자열 S0,S1,,SUS_0, S_1, \dots, S_U를 얻는다. 이 U+1U+1개 문자열 중 사전 순으로 가장 뒤에 오는 것을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 NNUU가 주어진다. (1N,U100,0001 \le N, U \le 100{,}000)

둘째 줄부터 UU개 줄에 걸쳐 LiL_iRiR_i가 주어진다. (1LiRiN1 \le L_i \le R_i \le N)

출력

U+1U+1개 문자열 중 사전 순으로 가장 뒤에 오는 것을 첫째 줄에 출력한다.

힌트

예제 입력에서 문자열은 다음 순서로 바뀐다.

  • S0S_0 = 0000000000
  • S1S_1 = 0000000011
  • S2S_2 = 0000011100
  • S3S_3 = 0000011111
  • S4S_4 = 1111100011
  • S5S_5 = 1100000011
  • S6S_6 = 1110000011
  • S7S_7 = 1101000011
  • S8S_8 = 1110111101
  • S9S_9 = 1111000001
  • S10S_{10} = 1111001001