만드는 중입니다

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

데산트 3

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

요약
각 k에 대해 준비된 병사가 k명인 초기 배치 중, 조건부 교환을 모두 실행한 뒤 준비된 병사가 연속된 구간을 이루는 경우의 수를 2로 나눈 나머지로 구합니다.
난이도

어려움10점 중 9점

유형
비트 연산, 조합론, 분할 정복
정답자
아직 제출이 없습니다

문제

바이토차가 다시 한 번 비토차를 공격할 계획이다. 엘리트 특수부대 바이토그롬에는 nn명의 병사가 있으며, 오늘 아침 집합에서 한 줄로 섰다. 상륙 작전을 맡은 바이타자르 장군이 왼쪽에서 오른쪽으로 위치에 11부터 nn까지 번호를 매겼다.

각 병사는 상륙할 준비가 되어 있거나, 개정된 법에 따라 추가 훈련이 필요하다. 바이타자르 장군은 준비된 병사들이 줄에서 연속된 구간을 이루기를 원한다. 형식적으로 말하면, 1≤i<j<k≤n1 \le i < j < k \le n을 만족하는 위치 세 개 중 ii번째와 kk번째 병사는 준비되어 있고 jj번째 병사는 준비되지 않은 경우가 없어야 한다.

이 조건은 기본 상태에서 성립하지 않을 수 있다. 그래서 바이타자르는 mm개의 명령을 내린다. ii번째 명령에서 위치 aia_i와 bib_i의 병사가 서로 신호를 주고받아 자리를 바꾼다. 자리를 바꾸는 조건은 aia_i번째 병사가 준비되어 있고 bib_i번째 병사가 준비되지 않은 경우뿐이다.

바이타자르는 명령의 순서를 이미 정했지만, 준비된 병사가 몇 명인지, 어느 위치에 서 있는지는 모른다. 11 이상 nn 이하의 각 정수 kk에 대해 다음 문제를 풀고자 한다. 준비된 병사가 정확히 kk명인 초기 배치는 (nk)\binom{n}{k}가지이다. 모든 명령을 수행한 뒤에도 바이타자르의 조건이 성립하는, 즉 준비된 병사들이 연속된 구간을 이루는 배치는 몇 가지인가? 이 값들을 구하는 것을 도와라.

참고로 알고리즘 대회에는 초보자가 많이 참가하므로 큰 수는 다루지 않기로 했다. 따라서 각 kk에 대해 가짓수를 소수 2로 나눈 나머지를 구하면 된다.

입력

첫 줄에 두 정수 nn과 mm(2≤n≤352 \le n \le 35; 1≤m≤10001 \le m \le 1000)이 주어진다. 각각 줄의 병사 수와 명령의 개수이다.

이어지는 mm개의 줄에는 각각 두 정수 aia_i와 bib_i(1≤ai,bi≤n1 \le a_i, b_i \le n; ai≠bia_i \ne b_i)가 주어지며, 명령의 내용은 문제에 설명한 그대로이다.

출력

첫 줄에 공백으로 구분된 정수 nn개를 출력한다. kk번째 정수는 준비된 병사가 정확히 kk명인 초기 배치 중, 모든 명령을 수행한 뒤 준비된 병사들이 연속된 구간을 이루는 배치의 개수를 2로 나눈 나머지이다.

힌트

초기에 준비된 병사가 한 명뿐이라면, 그 병사는 길이 1의 연속 구간을 반드시 이룬다. 반면 준비된 병사가 두 명인 경우에는 최종적으로 두 병사가 서로 붙어 서는 상황이 존재하지 않는다.

줄에서 두 번째 병사만 준비되지 않은 상황을 생각해 보자. 첫 번째 명령은 위치를 바꾸지 않는다. 두 번째 명령 후에는 첫 번째 병사가 준비되어 있고 두 번째 병사는 그렇지 않으므로 둘이 자리를 바꾼다. 세 번째 명령은 다시 효과가 없다. 이제 첫 번째 병사는 준비되지 않았고 네 번째 병사는 준비되어 있으므로, 마지막 명령에서는 자리를 바꾸지 않는다. 결국 준비되지 않은 병사는 첫 번째 병사뿐이다. 이는 k=3k = 3에서 바이타자르의 의도대로 끝나는 유일한 초기 배치이다.

따라서 이후 kk에 대한 가짓수는 [4,0,1,1][4, 0, 1, 1]이다.

예제1

  1. 예제 1

    입력
    4 4
    4 1
    1 2
    3 4
    1 4
    
    예상 출력
    0 0 1 1