/** 3 6 1 ###*OO O#OA%O ###*OO 2 3 2 1 **/ #include #define MOD7 1000000007ll; #define MOD9 1000000009ll; #define mod7(x) ((x+MOD7)%MOD7) #define mod9(x) ((x+MOD9)%MOD9) using namespace std; typedef __int128 LL; typedef __float128 LD; typedef int64_t ll; typedef long double ld; int main(void) { ios_base::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL); int n, m, k; cin >> n >> m >> k; char M[n + 2][m + 2]; bool buvau[n + 2][m + 2]; for (int i = 0; i < n + 2; i++) for (int j = 0; j < m + 2; j++) { M[i][j] = '#'; buvau[i][j] = false; } for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) cin >> M[i][j]; vector>adj[n + 2][m + 2]; for (int i = 0; i < k; i++) { int i1, j1, i2, j2; cin >> i1 >> j1 >> i2 >> j2; adj[i1][j1].push_back(make_pair(i2, j2)); adj[i2][j2].push_back(make_pair(i1, j1)); } queue>coord; for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) if (M[i][j] == 'A') coord.push(make_pair(i, j)); while (!coord.empty()) { pair a = coord.front(); coord.pop(); buvau[a.first][a.second] = true; if (M[a.first][a.second] == '#') continue; if (M[a.first][a.second] == '*') continue; if (M[a.first][a.second] == '%') { cout << 1; return 0; } for (pairx : adj[a.first][a.second]) if (!buvau[x.first][x.second]) { buvau[x.first][x.second] = true; coord.push(x); } if (!buvau[a.first + 1][a.second]) { buvau[a.first + 1][a.second] = true; coord.push(make_pair(a.first + 1, a.second)); } if (!buvau[a.first - 1][a.second]) { buvau[a.first - 1][a.second] = true; coord.push(make_pair(a.first - 1, a.second)); } if (!buvau[a.first][a.second + 1]) { buvau[a.first][a.second + 1] = true; coord.push(make_pair(a.first, a.second + 1)); } if (!buvau[a.first][a.second - 1]) { buvau[a.first][a.second - 1] = true; coord.push(make_pair(a.first, a.second - 1)); } } cout << 0; }