토러스 위의 도미노
시간 제한2초메모리 제한1024 MB
A×B 토러스에서 C×D 크기의 구멍을 제외한 바깥 표면을 도미노로 채우는 방법의 수를 구합니다.
문제
늘어나는 정사각형 종이가 있다고 상상해 보자. 이 종이를 격자선을 따라 크기의 직사각형으로 자른다. 모든 칸에는 1부터 까지 번호가 매겨져 있다. 이 직사각형에서 격자선을 따라 크기의 직사각형을 다시 잘라낸다. 이때 길이가 인 변은 길이가 인 변과 평행해야 한다. 그다음 길이가 인 변끼리 붙이고, 마지막으로 길이가 인 변끼리 붙인다. 그 결과 가운데에 칸짜리 직사각형 구멍이 뚫린 토러스가 만들어진다. (토러스는 도넛의 표면과 같은 모양이다.)
토러스의 칸은 번호가 다르면 서로 다른 것으로 본다.
이제 늘어나는 도미노로 구멍이 뚫린 토러스의 바깥 표면을 덮는다. 각 도미노는 흰색 칸과 검은색 칸, 서로 다른 색의 두 칸으로 이루어지며, 두 칸은 변을 공유한다.
타일링은 다음 조건을 만족해야 한다. 변으로 인접한 토러스의 두 칸이 서로 다른 도미노에 속하면, 두 칸의 색은 같아야 한다. 즉 둘 다 흰색이거나 둘 다 검은색이어야 한다.
두 타일링이 다르다는 것은 다음 두 조건 중 하나 이상이 성립한다는 뜻이다.
- 토러스의 어떤 칸이 한 타일링에서는 흰색이고 다른 타일링에서는 검은색이다.
- 어떤 칸을 덮은 도미노의 나머지 칸이 한 타일링에서는 이고 다른 타일링에서는 이며, 이다.
입력
입력의 첫 줄에 네 정수 , , , 가 주어진다 (, , , 모든 수는 짝수이다).
출력
타일링의 개수를 출력한다.
힌트
다음 그림은 주어진 예시에 대해 가능한 타일링 중 하나를 보여준다.
