만드는 중입니다

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

행렬 악몽

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

요약
정수 계수 다변수 다항식이 주어졌을 때, 그 다항식과 같은 순회 가중치를 갖는 작은 Z-var 행렬을 만들거나 해가 없으면 0을 출력합니다.
난이도

어려움10점 중 10점

유형
행렬, 조합론, 수학, 구현
정답자
아직 제출이 없습니다

문제

오비완이라면 이렇게 말했을 것이다: "이것은 네가 찾는 문제 설명이 아니다. 그냥 지나가라."

이중 팩토리얼 수는 다음 점화식으로 정의되는 수 did_i이다: d0=1d_0 = 1, 그리고 모든 i>0i > 0에 대해 di=di−1⋅i!d_i = d_{i-1} \cdot i!. 예를 들어 d3=1!⋅2!⋅3!=12d_3 = 1! \cdot 2! \cdot 3! = 12이다.

모든 원소가 집합 {0,…,n−1}\{0, \dots ,n-1\}에 속하는 길이 nn의 수열을 차수 nn의 제한 수열이라고 한다. 예를 들어 (0,2,0,1)(0, 2, 0, 1)은 차수 44의 제한 수열이다. 차수 nn의 모든 제한 수열의 집합을 SnS_n으로 적는다.

수열 A=(a0,…,an−1)A = (a_0, \dots , a_{n-1})의 확산 인자는 σ(A)=∏i=0n−1∏j=i+1n−1(ai−aj)\sigma(A) = \prod_{i=0}^{n-1}\prod_{j=i+1}^{n-1}(a_i - a_j)이다.

수열 쌍과 쌍의 수열 사이에는 직접적인 동형 대응이 있다. A,B∈SnA, B \in S_n이고 A=(a0,…,an−1)A = (a_0, \dots , a_{n-1}), B=(b0,…,bn−1)B = (b_0, \dots , b_{n-1})이라 하자. 대응하는 쌍의 수열 ((a0,b0),…,(an−1,bn−1))((a_0, b_0), \dots ,(a_{n-1}, b_{n-1}))을 PA,BP_{A,B}로 적는다.

정수 쌍은 사전식으로 비교한다. (a,b)≤(c,d)(a, b) \le (c, d)는 a<ca < c이거나 (a=c∧b≤da = c \land b \le d)인 경우를 뜻한다. 정수 쌍의 수열 P=(p0,…,pn−1)P = (p_0, \dots , p_{n-1})이 모든 ii에 대해 pi≤pi+1p_i \le p_{i+1}을 만족하면 PP는 사전식으로 정렬되어 있다고 한다. ρ(P)=\rho(P) = [PP가 사전식으로 정렬되어 있으면 11, 아니면 00]으로 정의한다.

행과 열을 00부터 n−1n - 1까지 번호 매긴 n×nn \times n 행렬 MM을 생각하자. 원소는 mr,cm_{r,c}로 적는다. 각 원소가 정수이거나 변수인 행렬을 Z\mathbb{Z}-var 행렬이라고 한다. MM의 nn단계 순회 가중치는 다음과 같다.

φ(M)=1dn−12⋅∑A=(a0,…,an−1),A∈Sn∑B=(b0,…,bn−1),B∈Sn(ρ(PA,B)⋅∣ρ(A)∣⋅ρ(B)⋅∏i=0n−1mai,bi)\varphi(M) = \frac{1}{d_{n-1}^2} \cdot \sum_{A=(a_0,\dots ,a_{n-1}), A \in S_n} \sum_{B=(b_0,\dots ,b_{n-1}), B \in S_n} \left( \rho(P_{A,B}) \cdot |\rho(A)| \cdot \rho(B) \cdot \prod_{i=0}^{n-1} m_{a_i,b_i} \right)

정수 계수의 다변수 다항식 pp가 주어진다. φ(M)=p\varphi(M) = p가 되는, 충분히 작은 Z\mathbb{Z}-var 행렬 MM을 하나 구하라.

입력

첫 줄에는 테스트 케이스의 개수 tt가 주어진다. 각 테스트 케이스 앞에는 빈 줄이 하나 있다.

각 테스트 케이스는 다항식을 설명하는 한 줄로 이루어진다. 변수는 a부터 z까지의 알파벳 문자이며, 문법은 입력 파일에서 명확하게 드러난다. 각 다항식의 연산(덧셈, 뺄셈, 곱셈)은 50개 미만이다.

출력

각 테스트 케이스마다 행렬 하나를 다음 형식으로 출력한다. 먼저 크기 nn을 쓰고, 이어서 모든 원소를 행 우선 순서로 쓴다. 원소 사이에는 양의 길이를 가진 공백이 몇 개든 들어갈 수 있다. 행렬의 크기는 7070을 넘을 수 없다. 모든 정수는 −109-10^9 이상 10910^9 이하여야 한다.

주어진 다항식에 대해 그런 행렬이 존재하지 않으면 대신 00 하나만 출력한다.

예제1

  1. 예제 1

    입력
    1
    
    xy
    
    예상 출력
    2
    1 y
    x 0