#include <bits/stdc++.h>
using namespace std;
#define Fast_IO \
ios_base::sync_with_stdio(false); \
cin.tie(NULL); \
cout.tie(NULL);
#define int long long int
#define debug(...) fprintf(stderr, __VA_ARGS__), fflush(stderr)
const int MOD = 998244353;
const int bigMOD = 1e9+7;
/*************** My code start here ****************/
int32_t main()
{
Fast_IO
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
clock_t danger_close = clock();
int t = 1;
// cin >> t;
while (t--)
{
int n, m, X, Y, d = 0, cnt = 0, f = 0;
cin >> n >> m >> X >> Y;
vector<string> grid(n);
vector<pair<int, int>> coins;
map<pair<int, int>, int> mp;
for(int i = 0; i < n; i++) {
cin >> grid[i];
for(int j = 0; j < m; j++) {
if(grid[i][j] == 'C')
mp[{i, j}] = cnt++;
}
}
queue<tuple<int, int, int>> q;
q.push({0, 0, 0});
vector<pair<int, int>> dirs = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
vector<vector<vector<bool>>> vis(n, vector<vector<bool>>(m, vector<bool>(1 << cnt, false)));
vis[0][0][0] = true;
while(!q.empty()) {
int l = q.size();
d++;
while(l--) {
auto [x, y, mask] = q.front();
q.pop();
for(auto [dx, dy]: dirs) {
int nx = x+dx, ny = y+dy;
if(nx < 0 or nx >= n or ny < 0 or ny >= m or grid[nx][ny] == '#')
continue;
if(mask == (1<<cnt)-1 and nx == X and ny == Y) {
f = 1;
break;
}
int newmask = mask;
if(grid[nx][ny] == 'C')
newmask = mask | (1<<mp[{nx, ny}]);
if(vis[nx][ny][newmask])
continue;
q.push({nx, ny, newmask});
vis[nx][ny][newmask] = true;
}
}
if(f)
break;
}
if(f)
cout << d << '\n';
else
cout << -1 << '\n';
}
debug("Total Time: %.3f\n", (double)(clock() - danger_close) / CLOCKS_PER_SEC);
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBGYXN0X0lPICAgICAgICAgICAgICAgICAgICAgICBcCiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgXAogICAgY2luLnRpZShOVUxMKTsgICAgICAgICAgICAgICAgICAgIFwKICAgIGNvdXQudGllKE5VTEwpOwojZGVmaW5lIGludCBsb25nIGxvbmcgaW50CiNkZWZpbmUgZGVidWcoLi4uKSBmcHJpbnRmKHN0ZGVyciwgX19WQV9BUkdTX18pLCBmZmx1c2goc3RkZXJyKQoKY29uc3QgaW50IE1PRCA9IDk5ODI0NDM1MzsKY29uc3QgaW50IGJpZ01PRCA9IDFlOSs3OwoKLyoqKioqKioqKioqKioqKiBNeSBjb2RlIHN0YXJ0IGhlcmUgKioqKioqKioqKioqKioqKi8KCmludDMyX3QgbWFpbigpCnsKICAgIEZhc3RfSU8KI2lmbmRlZiBPTkxJTkVfSlVER0UKICAgICAgICBmcmVvcGVuKCJpbnB1dC50eHQiLCAiciIsIHN0ZGluKTsKICAgIGZyZW9wZW4oIm91dHB1dC50eHQiLCAidyIsIHN0ZG91dCk7CiNlbmRpZgogICAgY2xvY2tfdCBkYW5nZXJfY2xvc2UgPSBjbG9jaygpOwogICAgaW50IHQgPSAxOwogICAgLy8gY2luID4+IHQ7CiAgICB3aGlsZSAodC0tKQogICAgewogICAgICAgIGludCBuLCBtLCBYLCBZLCBkID0gMCwgY250ID0gMCwgZiA9IDA7CiAgICAgICAgY2luID4+IG4gPj4gbSA+PiBYID4+IFk7CiAgICAgICAgdmVjdG9yPHN0cmluZz4gZ3JpZChuKTsKICAgICAgICB2ZWN0b3I8cGFpcjxpbnQsIGludD4+IGNvaW5zOwogICAgICAgIG1hcDxwYWlyPGludCwgaW50PiwgaW50PiBtcDsKICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgICAgIGNpbiA+PiBncmlkW2ldOwogICAgICAgICAgICBmb3IoaW50IGogPSAwOyBqIDwgbTsgaisrKSB7CiAgICAgICAgICAgICAgICBpZihncmlkW2ldW2pdID09ICdDJykKICAgICAgICAgICAgICAgICAgICBtcFt7aSwgan1dID0gY250Kys7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcXVldWU8dHVwbGU8aW50LCBpbnQsIGludD4+IHE7CiAgICAgICAgcS5wdXNoKHswLCAwLCAwfSk7CiAgICAgICAgdmVjdG9yPHBhaXI8aW50LCBpbnQ+PiBkaXJzID0ge3swLCAxfSwgezAsIC0xfSwgezEsIDB9LCB7LTEsIDB9fTsKICAgICAgICB2ZWN0b3I8dmVjdG9yPHZlY3Rvcjxib29sPj4+IHZpcyhuLCB2ZWN0b3I8dmVjdG9yPGJvb2w+PihtLCB2ZWN0b3I8Ym9vbD4oMSA8PCBjbnQsIGZhbHNlKSkpOwogICAgICAgIHZpc1swXVswXVswXSA9IHRydWU7CiAgICAgICAgd2hpbGUoIXEuZW1wdHkoKSkgewogICAgICAgICAgICBpbnQgbCA9IHEuc2l6ZSgpOwogICAgICAgICAgICBkKys7CiAgICAgICAgICAgIHdoaWxlKGwtLSkgewogICAgICAgICAgICAgICAgYXV0byBbeCwgeSwgbWFza10gPSBxLmZyb250KCk7CiAgICAgICAgICAgICAgICBxLnBvcCgpOwogICAgICAgICAgICAgICAgZm9yKGF1dG8gW2R4LCBkeV06IGRpcnMpIHsKICAgICAgICAgICAgICAgICAgICBpbnQgbnggPSB4K2R4LCBueSA9IHkrZHk7CiAgICAgICAgICAgICAgICAgICAgaWYobnggPCAwIG9yIG54ID49IG4gb3IgbnkgPCAwIG9yIG55ID49IG0gb3IgZ3JpZFtueF1bbnldID09ICcjJykKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgaWYobWFzayA9PSAoMTw8Y250KS0xIGFuZCBueCA9PSBYIGFuZCBueSA9PSBZKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGYgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaW50IG5ld21hc2sgPSBtYXNrOwogICAgICAgICAgICAgICAgICAgIGlmKGdyaWRbbnhdW255XSA9PSAnQycpCiAgICAgICAgICAgICAgICAgICAgICAgIG5ld21hc2sgPSBtYXNrIHwgKDE8PG1wW3tueCwgbnl9XSk7CiAgICAgICAgICAgICAgICAgICAgaWYodmlzW254XVtueV1bbmV3bWFza10pCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgIHEucHVzaCh7bngsIG55LCBuZXdtYXNrfSk7CiAgICAgICAgICAgICAgICAgICAgdmlzW254XVtueV1bbmV3bWFza10gPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmKGYpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgaWYoZikKICAgICAgICAgICAgY291dCA8PCBkIDw8ICdcbic7CiAgICAgICAgZWxzZQogICAgICAgICAgICBjb3V0IDw8IC0xIDw8ICdcbic7CiAgICB9CiAgICBkZWJ1ZygiVG90YWwgVGltZTogJS4zZlxuIiwgKGRvdWJsZSkoY2xvY2soKSAtIGRhbmdlcl9jbG9zZSkgLyBDTE9DS1NfUEVSX1NFQyk7CiAgICByZXR1cm4gMDsKfQ==