시간 제한메모리 제한제출정답맞힌 사람정답 비율
4 초 512 MB137131139.286%

문제

현욱은 학교 미술 과제로 여러 장의 색종이를 붙여 만든 작품을 내려고 한다. 현욱은 우선 색종이를 붙일 수 있는 위아래로 $N$칸, 좌우로 $M$칸 크기($ 1 \le N, M \le 2000 $)인 직사각형 모양의 모눈 종이를 준비했다.

현욱은 이 모눈 종이의 일부 칸에 색칠을 하고, 나머지 칸들은 색종이를 붙여서 채우려고 한다. 현욱은 가로, 세로 크기가 모눈 크기의 배수가 되는 여러 가지 종류의 색종이를 가지고 있다. 이 중에서 한 종류의 색종이를 골라 그 색종이만을 이용해서 모든 칸을 채우려고 하는데, 다음 조건을 만족하면서 색종이를 붙이려고 한다.

  • 색종이는 모눈 칸에 정확히 맞춰서 붙여야 하며, 회전할 수 없다.
  • 색종이끼리는 서로 겹쳐 붙여도 되지만, 기존에 색을 칠해둔 칸과 겹쳐 붙여서는 안 된다.
  • 색칠되지 않은 모든 칸은 한 장 이상의 색종이가 덮어야만 한다.

현욱은 이런 조건을 만족하는 색종이의 종류가 얼마나 다양한지 궁금해졌다. 현욱을 도와 주어진 조건을 만족하는 색종이 크기의 경우의 수를 계산해보자.

입력

첫 줄에 종이의 크기 $N$, $M$ 이 공백으로 구분되어 주어진다($ 1 \le N, M \le 2000 $).

둘째줄부터 $N$줄에 걸쳐 모눈 종이의 현재 상태가 주어진다. '.'의 경우 색이 칠해지지 않은 칸, '#'의 경우 색이 칠해진 칸이다. 색이 칠해지지 않은 칸은 반드시 하나 이상 존재한다.

출력

첫째 줄에 문제에서 제시된 조건을 만족하는 색종이의 크기가 몇 종류인지 출력한다.

서브태스크 1 (40점)

$ 1 \le N, M \le 15 $

서브태스크 2 (16점)

$ 1 \le N, M \le 100 $

서브태스크 3 (14점)

$ 1 \le N, M \le 400 $

서브태스크 4 (55점)

추가 제한 없음

예제 입력 1

3 3
..#
...
#..

예제 출력 1

4

1x1, 1x2, 2x1, 2x2 의 4종류의 색종이가 조건을 만족한다. 색종이를 회전할 수 없기 때문에 1x2 크기와 2x1 크기는 서로 다른 종류로 생각한다.

예제 입력 2

8 9
.........
.........
.........
...#.....
.....#...
....#....
.........
.........

예제 출력 2

4

예제 입력 3

9 9
######...
######...
######...
#........
#.....###
#.....###
#####....
#####....
#####....

예제 출력 3

9

예제 입력 4

5 5
.....
....#
...##
..###
.####

예제 출력 4

1
W3sicHJvYmxlbV9pZCI6IjIyOTc5IiwicHJvYmxlbV9sYW5nIjoiMCIsInRpdGxlIjoiXHVjMGM5XHVjODg1XHVjNzc0IFx1YmQ5OVx1Yzc3NFx1YWUzMCIsImRlc2NyaXB0aW9uIjoiPHA+XHVkNjA0XHVjNmIxXHVjNzQwIFx1ZDU1OVx1YWQ1MCBcdWJiZjhcdWMyMjAgXHVhY2ZjXHVjODFjXHViODVjIFx1YzVlY1x1YjdlYyBcdWM3YTVcdWM3NTggXHVjMGM5XHVjODg1XHVjNzc0XHViOTdjIFx1YmQ5OVx1YzVlYyBcdWI5Y2NcdWI0ZTAgXHVjNzkxXHVkNDg4XHVjNzQ0IFx1YjBiNFx1YjgyNFx1YWNlMCBcdWQ1NWNcdWIyZTQuIFx1ZDYwNFx1YzZiMVx1Yzc0MCBcdWM2YjBcdWMxMjAgXHVjMGM5XHVjODg1XHVjNzc0XHViOTdjIFx1YmQ5OVx1Yzc3YyBcdWMyMTggXHVjNzg4XHViMjk0IFx1YzcwNFx1YzU0NFx1Yjc5OFx1Yjg1YyAkTiRcdWNlNzgsIFx1Yzg4Y1x1YzZiMFx1Yjg1YyAkTSRcdWNlNzggXHVkMDZjXHVhZTMwKCQgMSBcXGxlIE4sIE0gXFxsZSAyMDAwICQpXHVjNzc4IFx1YzljMVx1YzBhY1x1YWMwMVx1ZDYxNSBcdWJhYThcdWM1OTFcdWM3NTggXHViYWE4XHViMjA4IFx1Yzg4NVx1Yzc3NFx1Yjk3YyBcdWM5MDBcdWJlNDRcdWQ1ODhcdWIyZTQuPFwvcD5cclxuXHJcbjxwPlx1ZDYwNFx1YzZiMVx1Yzc0MCBcdWM3NzQgXHViYWE4XHViMjA4IFx1Yzg4NVx1Yzc3NFx1Yzc1OCBcdWM3N2NcdWJkODAgXHVjZTc4XHVjNWQwIFx1YzBjOVx1Y2U2MFx1Yzc0NCBcdWQ1NThcdWFjZTAsIFx1YjA5OFx1YmEzOFx1YzljMCBcdWNlNzhcdWI0ZTRcdWM3NDAgXHVjMGM5XHVjODg1XHVjNzc0XHViOTdjIFx1YmQ5OVx1YzVlY1x1YzExYyBcdWNjNDRcdWM2YjBcdWI4MjRcdWFjZTAgXHVkNTVjXHViMmU0LiBcdWQ2MDRcdWM2YjFcdWM3NDAgXHVhYzAwXHViODVjLCBcdWMxMzhcdWI4NWMgXHVkMDZjXHVhZTMwXHVhYzAwIFx1YmFhOFx1YjIwOCBcdWQwNmNcdWFlMzBcdWM3NTggXHViYzMwXHVjMjE4XHVhYzAwIFx1YjQxOFx1YjI5NCBcdWM1ZWNcdWI3ZWMgXHVhYzAwXHVjOWMwIFx1Yzg4NVx1Yjk1OFx1Yzc1OCBcdWMwYzlcdWM4ODVcdWM3NzRcdWI5N2MgXHVhYzAwXHVjOWMwXHVhY2UwIFx1Yzc4OFx1YjJlNC4gXHVjNzc0IFx1YzkxMVx1YzVkMFx1YzExYyBcdWQ1NWMgXHVjODg1XHViOTU4XHVjNzU4IFx1YzBjOVx1Yzg4NVx1Yzc3NFx1Yjk3YyBcdWFjZThcdWI3N2MgXHVhZGY4IFx1YzBjOVx1Yzg4NVx1Yzc3NFx1YjljY1x1Yzc0NCBcdWM3NzRcdWM2YTlcdWQ1NzRcdWMxMWMgXHViYWE4XHViNGUwIFx1Y2U3OFx1Yzc0NCBcdWNjNDRcdWM2YjBcdWI4MjRcdWFjZTAgXHVkNTU4XHViMjk0XHViMzcwLCBcdWIyZTRcdWM3NGMgXHVjODcwXHVhYzc0XHVjNzQ0IFx1YjljY1x1Yzg3MVx1ZDU1OFx1YmE3NFx1YzExYyBcdWMwYzlcdWM4ODVcdWM3NzRcdWI5N2MgXHViZDk5XHVjNzc0XHViODI0XHVhY2UwIFx1ZDU1Y1x1YjJlNC48XC9wPlxyXG5cclxuPHVsPlxyXG5cdDxsaT5cdWMwYzlcdWM4ODVcdWM3NzRcdWIyOTQgXHViYWE4XHViMjA4IFx1Y2U3OFx1YzVkMCBcdWM4MTVcdWQ2NTVcdWQ3ODggXHViOWRlXHVjZGIwXHVjMTFjIFx1YmQ5OVx1YzVlY1x1YzU3YyBcdWQ1NThcdWJhNzAsIFx1ZDY4Y1x1YzgwNFx1ZDU2MCBcdWMyMTggXHVjNWM2XHViMmU0LjxcL2xpPlxyXG5cdDxsaT5cdWMwYzlcdWM4ODVcdWM3NzRcdWIwN2NcdWI5YWNcdWIyOTQgXHVjMTFjXHViODVjIFx1YWNiOVx1Y2NkMCBcdWJkOTlcdWM1ZWNcdWIzYzQgXHViNDE4XHVjOWMwXHViOWNjLCBcdWFlMzBcdWM4NzRcdWM1ZDAgXHVjMGM5XHVjNzQ0IFx1Y2U2MFx1ZDU3NFx1YjQ1NCBcdWNlNzhcdWFjZmMgXHVhY2I5XHVjY2QwIFx1YmQ5OVx1YzVlY1x1YzExY1x1YjI5NCBcdWM1NDggXHViNDFjXHViMmU0LjxcL2xpPlxyXG5cdDxsaT5cdWMwYzlcdWNlNjBcdWI0MThcdWM5YzAgXHVjNTRhXHVjNzQwIFx1YmFhOFx1YjRlMCBcdWNlNzhcdWM3NDAgXHVkNTVjIFx1YzdhNSBcdWM3NzRcdWMwYzFcdWM3NTggXHVjMGM5XHVjODg1XHVjNzc0XHVhYzAwIFx1YjM2ZVx1YzViNFx1YzU3Y1x1YjljYyBcdWQ1NWNcdWIyZTQuPFwvbGk+XHJcbjxcL3VsPlxyXG5cclxuPHA+XHVkNjA0XHVjNmIxXHVjNzQwIFx1Yzc3NFx1YjdmMCBcdWM4NzBcdWFjNzRcdWM3NDQgXHViOWNjXHVjODcxXHVkNTU4XHViMjk0IFx1YzBjOVx1Yzg4NVx1Yzc3NFx1Yzc1OCBcdWM4ODVcdWI5NThcdWFjMDAgXHVjNWJjXHViOWM4XHViMDk4IFx1YjJlNFx1YzU5MVx1ZDU1Y1x1YzljMCBcdWFkODFcdWFlMDhcdWQ1NzRcdWM4NGNcdWIyZTQuIFx1ZDYwNFx1YzZiMVx1Yzc0NCBcdWIzYzRcdWM2NDAgXHVjOGZjXHVjNWI0XHVjOWM0IFx1Yzg3MFx1YWM3NFx1Yzc0NCBcdWI5Y2NcdWM4NzFcdWQ1NThcdWIyOTQgXHVjMGM5XHVjODg1XHVjNzc0IFx1ZDA2Y1x1YWUzMFx1Yzc1OCBcdWFjYmRcdWM2YjBcdWM3NTggXHVjMjE4XHViOTdjIFx1YWNjNFx1YzBiMFx1ZDU3NFx1YmNmNFx1Yzc5MC48XC9wPlxyXG4iLCJpbnB1dCI6IjxwPlx1Y2NhYiBcdWM5MDRcdWM1ZDAgXHVjODg1XHVjNzc0XHVjNzU4IFx1ZDA2Y1x1YWUzMCAkTiQsICRNJCBcdWM3NzQgXHVhY2Y1XHViYzMxXHVjNzNjXHViODVjIFx1YWQ2Y1x1YmQ4NFx1YjQxOFx1YzViNCBcdWM4ZmNcdWM1YjRcdWM5YzRcdWIyZTQoJCAxIFxcbGUgTiwgTSBcXGxlIDIwMDAgJCkuPFwvcD5cclxuXHJcbjxwPlx1YjQ1OFx1YzlmOFx1YzkwNFx1YmQ4MFx1ZDEzMCAkTiRcdWM5MDRcdWM1ZDAgXHVhYzc4XHVjY2QwIFx1YmFhOFx1YjIwOCBcdWM4ODVcdWM3NzRcdWM3NTggXHVkNjA0XHVjN2FjIFx1YzBjMVx1ZDBkY1x1YWMwMCBcdWM4ZmNcdWM1YjRcdWM5YzRcdWIyZTQuIDxzdHJvbmc+JiMzOTsuJiMzOTs8XC9zdHJvbmc+XHVjNzU4IFx1YWNiZFx1YzZiMCBcdWMwYzlcdWM3NzQgXHVjZTYwXHVkNTc0XHVjOWMwXHVjOWMwIFx1YzU0YVx1Yzc0MCBcdWNlNzgsIDxzdHJvbmc+JiMzOTsjJiMzOTs8XC9zdHJvbmc+XHVjNzU4Jm5ic3A7XHVhY2JkXHVjNmIwIFx1YzBjOVx1Yzc3NCBcdWNlNjBcdWQ1NzRcdWM5YzQgXHVjZTc4XHVjNzc0XHViMmU0LiBcdWMwYzlcdWM3NzQgXHVjZTYwXHVkNTc0XHVjOWMwXHVjOWMwIFx1YzU0YVx1Yzc0MCBcdWNlNzhcdWM3NDAgXHViYzE4XHViNGRjXHVjMmRjIFx1ZDU1OFx1YjA5OCBcdWM3NzRcdWMwYzEmbmJzcDtcdWM4NzRcdWM3YWNcdWQ1NWNcdWIyZTQuPFwvcD5cclxuIiwib3V0cHV0IjoiPHA+XHVjY2FiXHVjOWY4IFx1YzkwNFx1YzVkMCBcdWJiMzhcdWM4MWNcdWM1ZDBcdWMxMWMgXHVjODFjXHVjMmRjXHViNDFjIFx1Yzg3MFx1YWM3NFx1Yzc0NCBcdWI5Y2NcdWM4NzFcdWQ1NThcdWIyOTQgXHVjMGM5XHVjODg1XHVjNzc0XHVjNzU4IFx1ZDA2Y1x1YWUzMFx1YWMwMCBcdWJhODcgXHVjODg1XHViOTU4XHVjNzc4XHVjOWMwIFx1Y2Q5Y1x1YjgyNVx1ZDU1Y1x1YjJlNC48XC9wPlxyXG4iLCJoaW50IjoiIiwib3JpZ2luYWwiOiIxIiwiaHRtbF90aXRsZSI6IjAiLCJwcm9ibGVtX2xhbmdfdGNvZGUiOiJLb3JlYW4iLCJzdWJ0YXNrMSI6IjxwPiQgMSBcXGxlIE4sIE0gXFxsZSAxNSAkPFwvcD5cclxuIiwic3VidGFzazIiOiI8cD4kIDEgXFxsZSBOLCBNIFxcbGUgMTAwICQ8XC9wPlxyXG4iLCJzdWJ0YXNrMyI6IjxwPiQgMSBcXGxlIE4sIE0gXFxsZSA0MDAgJDxcL3A+XHJcbiIsInN1YnRhc2s0IjoiPHA+XHVjZDk0XHVhYzAwIFx1YzgxY1x1ZDU1YyBcdWM1YzZcdWM3NGM8XC9wPlxyXG4iLCJzYW1wbGVfZXhwbGFpbl8xIjoiPHA+MXgxLCAxeDIsIDJ4MSwgMngyIFx1Yzc1OCA0XHVjODg1XHViOTU4XHVjNzU4IFx1YzBjOVx1Yzg4NVx1Yzc3NFx1YWMwMCBcdWM4NzBcdWFjNzRcdWM3NDQgXHViOWNjXHVjODcxXHVkNTVjXHViMmU0LiBcdWMwYzlcdWM4ODVcdWM3NzRcdWI5N2MgXHVkNjhjXHVjODA0XHVkNTYwIFx1YzIxOCBcdWM1YzZcdWFlMzAgXHViNTRjXHViYjM4XHVjNWQwIDF4MiBcdWQwNmNcdWFlMzBcdWM2NDAgMngxIFx1ZDA2Y1x1YWUzMFx1YjI5NCBcdWMxMWNcdWI4NWMgXHViMmU0XHViOTc4IFx1Yzg4NVx1Yjk1OFx1Yjg1YyBcdWMwZGRcdWFjMDFcdWQ1NWNcdWIyZTQuPFwvcD5cclxuIn0seyJwcm9ibGVtX2lkIjoiMjI5NzkiLCJwcm9ibGVtX2xhbmciOiIxIiwidGl0bGUiOiJPcmdhbml6aW5nIENvbG9yZWQgU2hlZXRzIiwiZGVzY3JpcHRpb24iOiI8cD5UaGVyZSBpcyBhIGxhcmdlIGdyaWQgb2Ygc2l6ZSAkbiBcXHRpbWVzIG0kLCB3aGVyZSBlYWNoIGdyaWQgY2VsbCBpcyBlaXRoZXIgY29sb3JlZCBvciB1bmNvbG9yZWQuPFwvcD5cclxuXHJcbjxwPlRvIG1ha2Ugc29tZSBhcnR3b3JrIG9uIHRoZSBncmlkLCBIeXVudWsgd2FudHMgdG8gcHV0IHNvbWUgc2hlZXRzIG9mIGNvbG9yZWQgcGFwZXIgaW4gc29tZSBvZiB0aGUgdW5jb2xvcmVkIGNlbGxzLiBIeXVudWsgc2VsZWN0cyB0d28gaW50ZWdlcnMgJHckLCAkaCQgd2hlcmUgJDEgXFxsZSB3IFxcbGUgbSQsICQxIFxcbGUgaCBcXGxlIG4kLiBUaGVuLCBIeXVudWsgY292ZXJzIHRoZSBncmlkIHdpdGggc2hlZXRzIG9mIGNvbG9yZWQgcGFwZXIgb2Ygd2lkdGgmbmJzcDskdyQgYW5kIGhlaWdodCAkaCQsIHNhdGlzZnlpbmcgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zLjxcL3A+XHJcblxyXG48dWw+XHJcblx0PGxpPlRoZSBjb2xvcmVkIHBhcGVyIHNob3VsZCBleGFjdGx5IGNvdmVyIHRoZSBncmlkIGNlbGxzLCBhbmQgbm90IGdvIG91dCBvZiB0aGUgZ3JpZC48XC9saT5cclxuXHQ8bGk+VGhlIGNvbG9yZWQgcGFwZXIgY2Fubm90IGJlIHJvdGF0ZWQuPFwvbGk+XHJcblx0PGxpPkEgY2VsbCBtYXkgYmUgY292ZXJlZCB3aXRoIG1vcmUgdGhhbiBvbmUgc2hlZXQgb2YgY29sb3JlZCBwYXBlci48XC9saT5cclxuXHQ8bGk+RXZlcnkgdW5jb2xvcmVkIGNlbGwgbXVzdCBiZSBjb3ZlcmVkIHdpdGggYXQgbGVhc3Qgb25lIHNoZWV0IG9mIGNvbG9yZWQgcGFwZXIuPFwvbGk+XHJcblx0PGxpPk5vIGNvbG9yZWQgY2VsbCBjYW4gYmUgY292ZXJlZCB3aXRoIGFueSBjb2xvcmVkIHBhcGVyLjxcL2xpPlxyXG48XC91bD5cclxuXHJcbjxwPkRlcGVuZGluZyBvbiB0aGUgc2VsZWN0aW9uIG9mIHdpZHRoIGFuZCBoZWlnaHQsIEh5dW51ayBtYXkgZmFpbCB0byBjb3ZlciB0aGUgZ3JpZCBzYXRpc2Z5aW5nIHRoZSBhYm92ZSBjb25kaXRpb25zLiBQbGVhc2UgY29tcHV0ZSB0aGUgbnVtYmVyIG9mIHBvc3NpYmxlIHNoZWV0IHNpemVzIHRoYXQgY2FuIGNvdmVyIHRoZSBncmlkIHNhdGlzZnlpbmcgYWxsIHRoZSBhYm92ZSBjb25kaXRpb25zLjxcL3A+XHJcbiIsImlucHV0IjoiPHA+VGhlIGZpcnN0IGxpbmUgY29udGFpbnMgdHdvIGludGVnZXJzICRuJCZuYnNwO2FuZCZuYnNwOyRtJCAoJDEgXFxsZSBuLCBtIFxcbGUgM1xcLDAwMCQpLjxcL3A+XHJcblxyXG48cD5UaGUgbmV4dCAkbiQmbmJzcDtsaW5lcyBlYWNoIGNvbnRhaW4gYSBsZW5ndGggJG0kJm5ic3A7c3RyaW5nIGRlbm90aW5nIHRoZSBzdGF0ZSBvZiB0aGUgZ3JpZC4mbmJzcDs8Y29kZT4uPFwvY29kZT4mbmJzcDtkZW5vdGVzIGFuIHVuY29sb3JlZCBjZWxsLCBhbmQmbmJzcDs8Y29kZT4jPFwvY29kZT4mbmJzcDtkZW5vdGVzIGEgY29sb3JlZCBjZWxsLjxcL3A+XHJcblxyXG48cD5UaGVyZSBpcyBhdCBsZWFzdCBvbmUgdW5jb2xvcmVkIGNlbGwgaW4gdGhlIGdyaWQuPFwvcD5cclxuIiwib3V0cHV0IjoiPHA+T3V0cHV0IHRoZSBudW1iZXIgb2YgcG9zc2libGUgc2hlZXQgc2l6ZXMgdGhhdCBjYW4gY292ZXIgdGhlIGdyaWQgc2F0aXNmeWluZyBhbGwgdGhlIGFib3ZlIGNvbmRpdGlvbnMuPFwvcD5cclxuIiwiaGludCI6IiIsIm9yaWdpbmFsIjoiMCIsImh0bWxfdGl0bGUiOiIwIiwicHJvYmxlbV9sYW5nX3Rjb2RlIjoiRW5nbGlzaCIsInN1YnRhc2sxIjoiPHA+JCAxIFxcbGUgTiwgTSBcXGxlIDE1ICQ8XC9wPlxyXG4iLCJzdWJ0YXNrMiI6IjxwPiQgMSBcXGxlIE4sIE0gXFxsZSAxMDAgJDxcL3A+XHJcbiIsInN1YnRhc2szIjoiPHA+JCAxIFxcbGUgTiwgTSBcXGxlIDQwMCAkPFwvcD5cclxuIiwic3VidGFzazQiOiI8cD5ObyBhZGRpdGlvbmFsIGNvbnN0cmFpbnRzLjxcL3A+XHJcbiIsInNhbXBsZV9leHBsYWluXzEiOiI8cD5JbiB0aGUgZmlyc3QgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBmb3VyIGNvbG9yZWQgcGFwZXIgc2F0aXNmeSB0aGUgY29uZGl0aW9uczogJDEgXFx0aW1lcyAxJCwgJDEgXFx0aW1lcyAyJCwgJDIgXFx0aW1lcyAxJCwgYW5kICQyIFxcdGltZXMgMiQuIFNpbmNlIHRoZSBjb2xvcmVkIHBhcGVyIGNhbiBub3QgYmUgcm90YXRlZCwgJDEgXFx0aW1lcyAyJCBhbmQgJDIgXFx0aW1lcyAxJCBhcmUgY29uc2lkZXJlZCBkaWZmZXJlbnQgc2l6ZXMuPFwvcD5cclxuXHJcbiJ9XQ==

출처

Contest > BOJ User Contest > 소프트콘 > 제3회 소프트콘 G번

Contest > Open Cup > 2021/2022 Season > Stage 4: Grand Prix of Korea I번

채점 및 기타 정보

  • 예제는 채점하지 않는다.