#include<bits/stdc++.h>
using namespace std;
#define mod 1000000007
#define inrange(i,j,n,m) (i>=0 && i<n && j>=0 && j<m)?true:false
class Solution {
public:
bool func(vector<vector<char>>& board, string& word,int a,int b){
int n=board.size(),m=board[0].size();
vector<vector<int>> visited(n,vector<int>(m,0));
stack<pair<int,int>> pos;
stack<int> curr;
pos.push({a,b});
curr.push(0);
while(!pos.empty()){
int i=pos.top().first;
int j=pos.top().second;
visited[i][j]=1;
int ind=curr.top();
pos.pop();
curr.pop();
if(ind==(word.size()-1)){
return true;
}
++ind;
if(inrange(i+1,j,n,m) && board[i+1][j]==word[ind] && !visited[i+1][j]){
pos.push({i+1,j});
curr.push(ind);
}
if(inrange(i-1,j,n,m) && board[i-1][j]==word[ind] && !visited[i-1][j]){
pos.push({i-1,j});
curr.push(ind);
}
if(inrange(i,j+1,n,m) && board[i][j+1]==word[ind] && !visited[i][j+1]){
pos.push({i,j+1});
curr.push(ind);
}
if(inrange(i,j-1,n,m) && board[i][j-1]==word[ind] && !visited[i][j-1]){
pos.push({i,j-1});
curr.push(ind);
}
}
return false;
}
bool exist(vector<vector<char>>& board, string word) {
int n=board.size();
int m=board[0].size();
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(board[i][j]==word[0]){
bool check=func(board,word,i,j);
if(check==true){
return true;
}
}
}
}
return false;
}
};
int main(){
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
Solution sol;
vector<vector<char>> vec{{'A','B','C','E'},
{'S','F','C','S'},
{'A','D','E','E'}};
string str="ABCB";
bool ans=sol.exist(vec,str);
cout<<ans;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBtb2QgMTAwMDAwMDAwNwojZGVmaW5lIGlucmFuZ2UoaSxqLG4sbSkgKGk+PTAgJiYgaTxuICYmIGo+PTAgJiYgajxtKT90cnVlOmZhbHNlCmNsYXNzIFNvbHV0aW9uIHsKcHVibGljOgogICAgYm9vbCBmdW5jKHZlY3Rvcjx2ZWN0b3I8Y2hhcj4+JiBib2FyZCwgc3RyaW5nJiB3b3JkLGludCBhLGludCBiKXsKICAgICAgICBpbnQgbj1ib2FyZC5zaXplKCksbT1ib2FyZFswXS5zaXplKCk7CiAgICAgICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiB2aXNpdGVkKG4sdmVjdG9yPGludD4obSwwKSk7CiAgICAgICAgc3RhY2s8cGFpcjxpbnQsaW50Pj4gcG9zOwogICAgICAgIHN0YWNrPGludD4gY3VycjsKICAgICAgICBwb3MucHVzaCh7YSxifSk7CiAgICAgICAgY3Vyci5wdXNoKDApOwogICAgICAgIHdoaWxlKCFwb3MuZW1wdHkoKSl7CiAgICAgICAgICAgIGludCBpPXBvcy50b3AoKS5maXJzdDsKICAgICAgICAgICAgaW50IGo9cG9zLnRvcCgpLnNlY29uZDsKICAgICAgICAgICAgdmlzaXRlZFtpXVtqXT0xOwogICAgICAgICAgICBpbnQgaW5kPWN1cnIudG9wKCk7CiAgICAgICAgICAgIHBvcy5wb3AoKTsKICAgICAgICAgICAgY3Vyci5wb3AoKTsKICAgICAgICAgICAgaWYoaW5kPT0od29yZC5zaXplKCktMSkpewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgKytpbmQ7CiAgICAgICAgICAgIGlmKGlucmFuZ2UoaSsxLGosbixtKSAmJiBib2FyZFtpKzFdW2pdPT13b3JkW2luZF0gJiYgIXZpc2l0ZWRbaSsxXVtqXSl7CiAgICAgICAgICAgICAgICBwb3MucHVzaCh7aSsxLGp9KTsKICAgICAgICAgICAgICAgIGN1cnIucHVzaChpbmQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmKGlucmFuZ2UoaS0xLGosbixtKSAmJiBib2FyZFtpLTFdW2pdPT13b3JkW2luZF0gJiYgIXZpc2l0ZWRbaS0xXVtqXSl7CiAgICAgICAgICAgICAgICBwb3MucHVzaCh7aS0xLGp9KTsKICAgICAgICAgICAgICAgIGN1cnIucHVzaChpbmQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmKGlucmFuZ2UoaSxqKzEsbixtKSAmJiBib2FyZFtpXVtqKzFdPT13b3JkW2luZF0gJiYgIXZpc2l0ZWRbaV1baisxXSl7CiAgICAgICAgICAgICAgICBwb3MucHVzaCh7aSxqKzF9KTsKICAgICAgICAgICAgICAgIGN1cnIucHVzaChpbmQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmKGlucmFuZ2UoaSxqLTEsbixtKSAmJiBib2FyZFtpXVtqLTFdPT13b3JkW2luZF0gJiYgIXZpc2l0ZWRbaV1bai0xXSl7CiAgICAgICAgICAgICAgICBwb3MucHVzaCh7aSxqLTF9KTsKICAgICAgICAgICAgICAgIGN1cnIucHVzaChpbmQpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGJvb2wgZXhpc3QodmVjdG9yPHZlY3RvcjxjaGFyPj4mIGJvYXJkLCBzdHJpbmcgd29yZCkgewogICAgICAgIGludCBuPWJvYXJkLnNpemUoKTsKICAgICAgICBpbnQgbT1ib2FyZFswXS5zaXplKCk7CiAgICAgICAgZm9yKGludCBpPTA7aTxuO2krKyl7CiAgICAgICAgICAgIGZvcihpbnQgaj0wO2o8bTtqKyspewogICAgICAgICAgICAgICAgaWYoYm9hcmRbaV1bal09PXdvcmRbMF0pewogICAgICAgICAgICAgICAgICAgIGJvb2wgY2hlY2s9ZnVuYyhib2FyZCx3b3JkLGksaik7CiAgICAgICAgICAgICAgICAgICAgaWYoY2hlY2s9PXRydWUpewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQp9OwppbnQgbWFpbigpewojaWZuZGVmIE9OTElORV9KVURHRQoJZnJlb3BlbigiaW5wdXQudHh0IiwgInIiLCBzdGRpbik7CglmcmVvcGVuKCJvdXRwdXQudHh0IiwgInciLCBzdGRvdXQpOwojZW5kaWYKICAgIFNvbHV0aW9uIHNvbDsKICAgIHZlY3Rvcjx2ZWN0b3I8Y2hhcj4+IHZlY3t7J0EnLCdCJywnQycsJ0UnfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J1MnLCdGJywnQycsJ1MnfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J0EnLCdEJywnRScsJ0UnfX07CiAgICBzdHJpbmcgc3RyPSJBQkNCIjsKICAgIGJvb2wgYW5zPXNvbC5leGlzdCh2ZWMsc3RyKTsKICAgIGNvdXQ8PGFuczsKfQo=