빙고
시간 제한1초메모리 제한1024 MB
n과 k가 주어질 때, n x n 격자에서 가로, 세로, 대각선 어느 줄도 완성하지 않으면서 정확히 k칸을 채울 수 있는지 판정하고 그 격자를 출력한다.
문제
빙고는 정사각 격자 위에서 하는 게임이다. 각 참가자는 격자를 받아 각 칸에 서로 다른 수를 하나씩 적는다. 그다음 진행자가 무작위로 수를 하나 뽑으면, 각 참가자는 자기 격자에서 그 수를 찾고 격자에 그 수가 있으면 해당 칸을 칠한다. 누군가가 한 줄에 칠해진 칸을 개 만들 때까지 이 과정을 반복하는데, 이렇게 완성된 줄을 빙고 줄이라고 하자.
가능한 빙고 줄은 개다. 가로 줄, 세로 줄, 대각선 줄이다.
--- ... ... |.. .|. ..| \.. ../
... --- ... |.. .|. ..| .\. ./.
... ... --- |.. .|. ..| ..\ /..
예를 들어 다음 격자는 빙고 줄이 네 개다. 가로 두 줄, 세로 한 줄, 대각선 한 줄이다.
#..#.
#####
..###
#####
..###
빙고 줄은 언제 만들어질까? 이는 완전히 무작위다. 운이 좋으면 꽤 이른 시점에 줄을 완성할 수도 있고, 반대로 빙고 줄을 하나도 만들지 않고 격자의 대부분을 칠할 수도 있다. 이 문제에서는 빙고 줄을 하나도 만들지 않고 개의 칸을 칠하는 불운한 경우를 살펴본다.
두 정수 과 가 주어질 때, 격자에서 빙고 줄을 하나도 만들지 않고 정확히 개의 칸을 칠할 수 있는지 판별하라. 가능하다면 그 방법을 하나 보여라.
입력
첫 번째 줄이자 유일한 줄에 두 정수 과 가 주어진다.
출력
격자에서 빙고 줄을 하나도 만들지 않고 정확히 개의 칸을 칠할 수 있으면 첫 번째 줄에 YES를 출력한다. 그렇지 않으면 NO를 출력한다.
답이 YES이면 다음 줄부터 격자의 각 줄을 출력한다. 각 줄은 개의 문자로 이루어진 문자열이다. 번째 문자는 그 줄의 번째 칸이 칠해졌으면 #(ASCII 35), 칠해지지 않았으면 .(ASCII 46)이다. 정확히 개의 칸이 칠해져 있어야 하며, 빙고 줄이 있어서는 안 된다.
격자를 채우는 방법이 여러 가지라면 그중 아무거나 하나를 출력한다.
제한
힌트
두 번째 예제는 부분문제 2와 3에서만 유효하다.