#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
const int dx[] = {-1, 0, +1, 0};
const int dy[] = {0, -1, 0, +1};
bool dfs(vector<string> &f, int n, int r, int c, int m)
{
const int rows = f.size();
const int cols = f[0].size();
if (m == n) {
return true;
}
for (int k = 0; k < 4; ++k) {
int r2 = r + dy[k];
int c2 = c + dx[k];
if (r2 < 0 || rows <= r2 || c2 < 0 || cols < c2) {
continue;
}
if (f[r2][c2] != '0') {
continue;
}
f[r2][c2] = '2';
if (dfs(f, n, r2, c2, m + 1)) {
return true;
}
f[r2][c2] = '0';
}
return false;
}
int main()
{
int rows, cols;
while (cin >> rows >> cols) {
vector<string> f(rows);
for (auto &s : f) {
cin >> s;
cout << s << endl;
}
int n = 0;
int sr = -1, sc = -1;
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols; ++j) {
if (f[i][j] == '0') {
++n;
}
if (f[i][j] == '2') {
sr = i;
sc = j;
}
}
}
if (dfs(f, n, sr, sc, 0)) {
cout << "OK" << endl;
} else {
cout << "NG" << endl;
}
cout << endl;
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGludCBkeFtdID0gey0xLCAwLCArMSwgMH07CmNvbnN0IGludCBkeVtdID0gezAsIC0xLCAwLCArMX07CmJvb2wgZGZzKHZlY3RvcjxzdHJpbmc+ICZmLCBpbnQgbiwgaW50IHIsIGludCBjLCBpbnQgbSkKewogICAgY29uc3QgaW50IHJvd3MgPSBmLnNpemUoKTsKICAgIGNvbnN0IGludCBjb2xzID0gZlswXS5zaXplKCk7CiAgICBpZiAobSA9PSBuKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBmb3IgKGludCBrID0gMDsgayA8IDQ7ICsraykgewogICAgICAgIGludCByMiA9IHIgKyBkeVtrXTsKICAgICAgICBpbnQgYzIgPSBjICsgZHhba107CiAgICAgICAgaWYgKHIyIDwgMCB8fCByb3dzIDw9IHIyIHx8IGMyIDwgMCB8fCBjb2xzIDwgYzIpIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmIChmW3IyXVtjMl0gIT0gJzAnKSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBmW3IyXVtjMl0gPSAnMic7CiAgICAgICAgaWYgKGRmcyhmLCBuLCByMiwgYzIsIG0gKyAxKSkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgZltyMl1bYzJdID0gJzAnOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwp9CgppbnQgbWFpbigpCnsKICAgIGludCByb3dzLCBjb2xzOwogICAgd2hpbGUgKGNpbiA+PiByb3dzID4+IGNvbHMpIHsKICAgICAgICB2ZWN0b3I8c3RyaW5nPiBmKHJvd3MpOwogICAgICAgIGZvciAoYXV0byAmcyA6IGYpIHsKICAgICAgICAgICAgY2luID4+IHM7CiAgICAgICAgICAgIGNvdXQgPDwgcyA8PCBlbmRsOwogICAgICAgIH0KICAgICAgICBpbnQgbiA9IDA7CiAgICAgICAgaW50IHNyID0gLTEsIHNjID0gLTE7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dzOyArK2kpIHsKICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjb2xzOyArK2opIHsKICAgICAgICAgICAgICAgIGlmIChmW2ldW2pdID09ICcwJykgewogICAgICAgICAgICAgICAgICAgICsrbjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChmW2ldW2pdID09ICcyJykgewogICAgICAgICAgICAgICAgICAgIHNyID0gaTsKICAgICAgICAgICAgICAgICAgICBzYyA9IGo7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGRmcyhmLCBuLCBzciwgc2MsIDApKSB7CiAgICAgICAgICAgIGNvdXQgPDwgIk9LIiA8PCBlbmRsOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvdXQgPDwgIk5HIiA8PCBlbmRsOwogICAgICAgIH0KICAgICAgICBjb3V0IDw8IGVuZGw7CiAgICB9Cn0K
NCA0CjAwMDAKMDIxMAowMDAwCjAxMDAKCjQgNAowMDAwCjAyMDAKMDAxMAowMDAwCgo1IDYKMDAwMDAwCjIxMDAwMAowMDAxMDAKMDAwMDAxCjAwMDAwMAoKNSA2CjAwMDAwMAoyMTAwMDAKMDAwMTAwCjAwMDAwMAowMDAwMDEK
4 4
0000
0210
0000
0100
4 4
0000
0200
0010
0000
5 6
000000
210000
000100
000001
000000
5 6
000000
210000
000100
000000
000001