만드는 중입니다

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

바이큐브

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

요약
접은 단위 정육면체 여덟 개로 2x2x2 바이큐브를 만들 수 있는지 판단합니다. 안쪽 면은 검은색이고 바깥 면은 서로 다른 단색이어야 합니다.
난이도

보통10점 중 6점

유형
시뮬레이션, 구현, 완전 탐색
정답자
아직 제출이 없습니다

문제

메리 토마스는 모눈종이 여러 장을 가지고 있다. 종이 앞면의 일부 칸은 검은색이나 빨강, 파랑 같은 유채색으로 칠해져 있다. 칠해지지 않은 부분을 잘라내면 그녀에게는 펼쳐진 단위 정육면체 8개가 남는다. 여기서 단위 정육면체는 각 면이 한 칸으로 이루어진 정육면체를 말한다.

그녀는 앞면이 바깥으로 보이도록 이 단위 정육면체 8개를 만든 다음, 이것으로 바이큐브를 만들려고 한다. 바이큐브는 단위 정육면체 8개로 이루어진 2 × 2 × 2 크기의 정육면체이며, 다음 조건을 만족한다.

  • 바이큐브 안쪽에 들어가는 단위 정육면체의 면은 모두 검은색이다.
  • 바이큐브의 각 면은 하나의 유채색으로 고르게 칠해져 있다.
  • 바이큐브의 여섯 면의 색은 모두 서로 다르다.

이 문제의 목표는 모눈종이의 명세를 읽고, 그 종이에서 얻은 단위 정육면체 8개로 바이큐브를 만들 수 있는지 판정하는 프로그램을 작성하는 것이다.

입력

입력은 종이의 명세이다. 첫 줄에 종이의 높이 H와 너비 W가 정수로 주어진다 (3 ≤ H, W ≤ 50). 이어서 W개의 문자로 이루어진 줄이 H개 주어진다. 각 문자는 칸의 색을 나타낸다. 'A'부터 'Z', 'a'부터 'z', '0'부터 '9'까지의 영문자와 숫자는 유채색 칸이고, '#'은 검은색 칸, '.'은 칠해지지 않은 칸이다. 같은 문자는 같은 색이며, 다른 문자는 다른 색이다. 변을 공유하며 이어진 칸들의 덩어리가 펼쳐진 정육면체 하나를 이룬다. 꼭짓점만 공유하는 칸은 이어진 것으로 보지 않는다.

출력

주어진 종이로 바이큐브를 만들 수 있으면 "Yes", 그렇지 않으면 "No"를 출력한다.

예제3

  1. 예제 1

    입력
    3 40
    .a....a....a....a....f....f....f....f...
    #bc#.#cd#.#de#.#eb#.#cb#.#dc#.#ed#.#be#.
    .#....#....#....#....#....#....#....#...
    
    예상 출력
    Yes
    
  2. 예제 2

    입력
    5 35
    .a....a....a....a....f....f....f...
    #bc#.#cd#.#de#.#eb#.#cb#.#dc#.#ed#.
    .#..f.#....#....#....#....#....#...
    ..e##..............................
    .b#................................
    
    예상 출력
    Yes
    
  3. 예제 3

    입력
    3 40
    .a....a....a....a....f....f....f....f...
    #bc#.#cd#.#de#.#eb#.#cb#.#dc#.#ed#.#eb#.
    .#....#....#....#....#....#....#....#...
    
    예상 출력
    No