#include <bits/stdc++.h>
using namespace std;
bool maze[20][20]; //defined maze of maximum size 20x20
bool visited[20][20];
bool Safe(int n, int m, int x, int y) //checking if a position is viable for moving through
{
if(x >= 0 && x < n && y >= 0 && y < m)
{
if(maze[x][y] == 1) return true;
}
return false;
}
bool Utility(int n, int m, int x, int y) //main utility function
{
if(x == n - 1 && y == m - 1 && maze[x][y] == 1) // base case, end of maze
{
return true;
}
if(!visited[x][y] && Safe(n, m, x, y))
{
visited[x][y] = true;
if(Safe(n, m, x + 1, y)) // checking if it is viable to move down
{
if(Utility(n, m, x + 1, y))
{
return true;
}
}
if(Safe(n, m, x, y + 1))
{
if(Utility(n, m, x, y + 1)) // checking if it is viable to move right
{
return true;
}
}
if(Safe(n, m, x - 1, y))
{
if(Utility(n, m, x - 1, y)) // checking if it is viable to move up
{
return true;
}
}
if(Safe(n, m, x, y - 1))
{
if(Utility(n, m, x, y - 1)) // checking if it is viable to move left
{
return true;
}
}
}
return false; // returning false
}
int main()
{
int n, m;
cin >> n >> m; // input dimensions of the maze
for(int i = 0; i < n; i++) // input maze
{
for(int j = 0; j < m; j++)
{
char c;
cin >> c;
if(c == '.') //character '.' means a tile which you can go through
{
maze[i][j] = true;
}
else //character 'x' means a tile which you cannot go through
{
maze[i][j] = false;
}
visited[i][j] = false;
}
}
if(Utility(n, m, 0, 0)) //printing yes or no
{
cout << "da";
}
else
{
cout << "ne";
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKYm9vbCBtYXplWzIwXVsyMF07IC8vZGVmaW5lZCBtYXplIG9mIG1heGltdW0gc2l6ZSAyMHgyMApib29sIHZpc2l0ZWRbMjBdWzIwXTsKCmJvb2wgU2FmZShpbnQgbiwgaW50IG0sIGludCB4LCBpbnQgeSkgLy9jaGVja2luZyBpZiBhIHBvc2l0aW9uIGlzIHZpYWJsZSBmb3IgbW92aW5nIHRocm91Z2gKewogICAgaWYoeCA+PSAwICYmIHggPCBuICYmIHkgPj0gMCAmJiB5IDwgbSkKICAgIHsKICAgICAgICBpZihtYXplW3hdW3ldID09IDEpIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwp9Cgpib29sIFV0aWxpdHkoaW50IG4sIGludCBtLCBpbnQgeCwgaW50IHkpIC8vbWFpbiB1dGlsaXR5IGZ1bmN0aW9uCnsKICAgIGlmKHggPT0gbiAtIDEgJiYgeSA9PSBtIC0gMSAmJiBtYXplW3hdW3ldID09IDEpIC8vIGJhc2UgY2FzZSwgZW5kIG9mIG1hemUKICAgIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBpZighdmlzaXRlZFt4XVt5XSAmJiBTYWZlKG4sIG0sIHgsIHkpKQogICAgewogICAgCXZpc2l0ZWRbeF1beV0gPSB0cnVlOwogICAgICAgIGlmKFNhZmUobiwgbSwgeCArIDEsIHkpKSAvLyBjaGVja2luZyBpZiBpdCBpcyB2aWFibGUgdG8gbW92ZSBkb3duCiAgICAgICAgewogICAgICAgICAgICBpZihVdGlsaXR5KG4sIG0sIHggKyAxLCB5KSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYoU2FmZShuLCBtLCB4LCB5ICsgMSkpCiAgICAgICAgewogICAgICAgICAgICBpZihVdGlsaXR5KG4sIG0sIHgsIHkgKyAxKSkgLy8gY2hlY2tpbmcgaWYgaXQgaXMgdmlhYmxlIHRvIG1vdmUgcmlnaHQKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYoU2FmZShuLCBtLCB4IC0gMSwgeSkpCiAgICAgICAgewogICAgICAgICAgICBpZihVdGlsaXR5KG4sIG0sIHggLSAxLCB5KSkgLy8gY2hlY2tpbmcgaWYgaXQgaXMgdmlhYmxlIHRvIG1vdmUgdXAKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYoU2FmZShuLCBtLCB4LCB5IC0gMSkpCiAgICAgICAgewogICAgICAgICAgICBpZihVdGlsaXR5KG4sIG0sIHgsIHkgLSAxKSkgLy8gY2hlY2tpbmcgaWYgaXQgaXMgdmlhYmxlIHRvIG1vdmUgbGVmdAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gZmFsc2U7IC8vIHJldHVybmluZyBmYWxzZQp9CgppbnQgbWFpbigpCnsKICAgIGludCBuLCBtOwoKICAgIGNpbiA+PiBuID4+IG07IC8vIGlucHV0IGRpbWVuc2lvbnMgb2YgdGhlIG1hemUKCiAgICBmb3IoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSAvLyBpbnB1dCBtYXplCiAgICB7CiAgICAgICAgZm9yKGludCBqID0gMDsgaiA8IG07IGorKykKICAgICAgICB7CiAgICAgICAgICAgIGNoYXIgYzsKICAgICAgICAgICAgY2luID4+IGM7CiAgICAgICAgICAgIGlmKGMgPT0gJy4nKSAvL2NoYXJhY3RlciAnLicgbWVhbnMgYSB0aWxlIHdoaWNoIHlvdSBjYW4gZ28gdGhyb3VnaAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBtYXplW2ldW2pdID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlICAgICAgICAgLy9jaGFyYWN0ZXIgJ3gnIG1lYW5zIGEgdGlsZSB3aGljaCB5b3UgY2Fubm90IGdvIHRocm91Z2gKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbWF6ZVtpXVtqXSA9IGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZpc2l0ZWRbaV1bal0gPSBmYWxzZTsKICAgICAgICB9CiAgICB9CgogICAgaWYoVXRpbGl0eShuLCBtLCAwLCAwKSkgLy9wcmludGluZyB5ZXMgb3Igbm8KICAgIHsKICAgICAgICBjb3V0IDw8ICJkYSI7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgY291dCA8PCAibmUiOwogICAgfQogICAgCgogICAgcmV0dXJuIDA7Cn0=