#include <bits/stdc++.h>
using namespace std;
#define in freopen("Warecraft tranquilpaths.txt", "r", stdin);
#define out freopen("output.txt", "w", stdout);
#define pb push_back
#define ll long long
#define endl '\n'
vector<vector<int>> vis ;
vector<vector<char>> grid;
int di[] = {1 , -1 , 0 , 0 , 1 , -1 , -1 , 1};
int dj[] = {0 , 0 , 1 ,-1 , 1 , -1 , 1 , -1};
int n, m, d;
vector<vector<long double>> dis ;
vector<vector<pair<int, int>>> parent;
vector<vector<bool>> added;
void dijkstra(pair<int , int > st , pair<int , int> en, int day){
// vis[st.first][st.second]=true;
priority_queue<tuple<long double, int,int>>q ;
// if(added[st.first][st.second])
// q.push(0, st.first , st.second});
// else
q.push({0, st.first , st.second});
vis.assign(n, vector<int>(m, false));
ll const OO = 2e18;
dis.assign(n, vector<long double>(m, OO));
while(q.size()){
auto to = q.top();
auto [cst, i, j] = to;
q.pop();
if(vis[i][j]++)continue ;
// cout << i << ' ' << j << ' ' << cst << endl;
if(i == en.first && j == en.second)
break;
// cout.flush();
for(int k = 0 ; k < 8 ; k ++){
int ni = di[k] + i ;
int nj = dj[k] + j ;
if(ni < 0 || nj < 0 || ni >= n || nj >= m || vis[ni][nj] || grid[ni][nj] == '#')
continue ;
long double val = (grid[i][j] == 'C' ? 1 : grid[i][j] == 'N' ? 2 : 5);
if(added[ni][nj] && make_pair(ni, nj) != en)
val += 100;
if(k >= 4){
if(grid[ni][j] == '#' && grid[i][nj] == '#')
continue;
// if(i == 43 && j == 74){
// cout << "Here: " << ni << ' ' << nj << endl;
// }
val *= sqrt(2);
// cout << "val: " << val << endl;
}
if(dis[ni][nj] > val - cst){
dis[ni][nj] = val - cst ;
q.push({-val + cst, ni,nj});
parent[ni][nj] = {i, j};
}
}
}
}
void print(int x, int y, int i, int j){
// is
cout << '(' << y << ',' << x << ')' << ' ';
added[x][y] = 1;
if(x == i && y == j)
return;
print(parent[x][y].first, parent[x][y].second, i, j);
}
void solve(){
cin >> n >> m >> d;
// #: 0, C: 1, N: 2, D: 5
grid.assign(n, vector<char> (m, -1));
added.assign(n, vector<bool> (m, 0));
// vis.assign(n, vector<int> (m, 0));
// dis.assign(n, vector<long double> (m, 2e18));
parent.assign(n, vector<pair<int, int>> (m, {-1, -1}));
vector<pair<int, int>> start(d + 1, {-1, -1}), finish(d + 1, {-1, -1});
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
string cell;
cin >> cell;
if(cell.back() == '}'){
int curr = 0;
for(int k = 2; k < cell.size(); k++){
if(cell[k] == ',' || cell[k] == '}'){
(start[curr] == make_pair(-1, -1) ? start[curr] : finish[curr]) = {i, j};
curr = 0;
continue;
}
curr = curr * 10 + (cell[k] - '0');
}
grid[i][j] = cell[0];
}else{
if(cell[0] == '#'){
grid[i][j] = '#';
}else if(cell[0] == 'C'){
grid[i][j] = 'C';
}else if(cell[0] == 'N'){
grid[i][j] = 'N';
}else if(cell[0] == 'D'){
grid[i][j] = 'D';
}else{
int x = stoi(cell);
(start[x] == make_pair(-1, -1) ? start[x] : finish[x]) = {i, j};
grid[i][j] = 'C';
}
}
}
}
for(int day = 1; day <= d; day++){
dijkstra(start[day], finish[day], day);
auto [x, y] = finish[day];
// cout << dis[x][y] << endl;
print(x, y, start[day].first, start[day].second);
cout << endl;
// if(day == 82){
// break;
// }
}
}
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
in;
out;
int t = 1;
// cin >> t;
while(t--)
solve();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwojZGVmaW5lIGluIGZyZW9wZW4oIldhcmVjcmFmdCB0cmFucXVpbHBhdGhzLnR4dCIsICJyIiwgc3RkaW4pOwojZGVmaW5lIG91dCBmcmVvcGVuKCJvdXRwdXQudHh0IiwgInciLCBzdGRvdXQpOwoKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBlbmRsICdcbicKCnZlY3Rvcjx2ZWN0b3I8aW50Pj4gdmlzIDsKdmVjdG9yPHZlY3RvcjxjaGFyPj4gZ3JpZDsKaW50IGRpW10gPSB7MSAsIC0xICwgMCAsIDAgLCAxICwgLTEgLCAtMSAsIDF9OwppbnQgZGpbXSA9IHswICwgMCAsIDEgLC0xICwgMSAsIC0xICwgMSAsIC0xfTsKaW50IG4sIG0sIGQ7CnZlY3Rvcjx2ZWN0b3I8bG9uZyBkb3VibGU+PiBkaXMgOwp2ZWN0b3I8dmVjdG9yPHBhaXI8aW50LCBpbnQ+Pj4gcGFyZW50Owp2ZWN0b3I8dmVjdG9yPGJvb2w+PiBhZGRlZDsKdm9pZCBkaWprc3RyYShwYWlyPGludCAsIGludCA+IHN0ICwgcGFpcjxpbnQgLCBpbnQ+IGVuLCBpbnQgZGF5KXsKICAgIC8vIHZpc1tzdC5maXJzdF1bc3Quc2Vjb25kXT10cnVlOwogICAgcHJpb3JpdHlfcXVldWU8dHVwbGU8bG9uZyBkb3VibGUsIGludCxpbnQ+PnEgOwogICAgLy8gaWYoYWRkZWRbc3QuZmlyc3RdW3N0LnNlY29uZF0pCiAgICAvLyAgICAgcS5wdXNoKDAsIHN0LmZpcnN0ICwgc3Quc2Vjb25kfSk7CiAgICAvLyBlbHNlCiAgICAgICAgcS5wdXNoKHswLCBzdC5maXJzdCAsIHN0LnNlY29uZH0pOwogICAgCiAgICB2aXMuYXNzaWduKG4sIHZlY3RvcjxpbnQ+KG0sIGZhbHNlKSk7CiAgICBsbCBjb25zdCBPTyA9IDJlMTg7CiAgICBkaXMuYXNzaWduKG4sIHZlY3Rvcjxsb25nIGRvdWJsZT4obSwgT08pKTsKCiAgICB3aGlsZShxLnNpemUoKSl7CiAgICAgICAgYXV0byB0byA9IHEudG9wKCk7CiAgICAgICAgYXV0byBbY3N0LCBpLCBqXSA9IHRvOwogICAgICAgIHEucG9wKCk7CiAgICAgICAgaWYodmlzW2ldW2pdKyspY29udGludWUgOwogICAgICAgIAogICAgICAgIAogICAgICAgIC8vIGNvdXQgPDwgaSA8PCAnICcgPDwgaiA8PCAnICcgPDwgY3N0IDw8IGVuZGw7CiAgICAgICAgaWYoaSA9PSBlbi5maXJzdCAmJiBqID09IGVuLnNlY29uZCkKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIC8vIGNvdXQuZmx1c2goKTsKICAgICAgICBmb3IoaW50IGsgPSAwIDsgayA8IDggOyBrICsrKXsKICAgICAgICAgICAgaW50IG5pID0gZGlba10gKyBpIDsKICAgICAgICAgICAgaW50IG5qID0gZGpba10gKyBqIDsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmKG5pIDwgMCB8fCBuaiA8IDAgfHwgbmkgPj0gbiB8fCAgbmogPj0gbSB8fCB2aXNbbmldW25qXSB8fCBncmlkW25pXVtual0gPT0gJyMnKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlIDsKCiAgICAgICAgICAgIGxvbmcgZG91YmxlIHZhbCA9IChncmlkW2ldW2pdID09ICdDJyA/IDEgOiBncmlkW2ldW2pdID09ICdOJyA/IDIgOiA1KTsKICAgICAgICAgICAgaWYoYWRkZWRbbmldW25qXSAmJiBtYWtlX3BhaXIobmksIG5qKSAhPSBlbikKICAgICAgICAgICAgICAgIHZhbCArPSAxMDA7CiAKICAgICAgICAgICAgaWYoayA+PSA0KXsKICAgICAgICAgICAgICAgIGlmKGdyaWRbbmldW2pdID09ICcjJyAmJiBncmlkW2ldW25qXSA9PSAnIycpCiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAvLyBpZihpID09IDQzICYmIGogPT0gNzQpewogICAgICAgICAgICAgICAgLy8gICAgIGNvdXQgPDwgIkhlcmU6ICIgPDwgbmkgPDwgJyAnIDw8IG5qIDw8IGVuZGw7CiAgICAgICAgICAgICAgICAvLyB9CiAgICAgICAgICAgICAgICB2YWwgKj0gc3FydCgyKTsKICAgICAgICAgICAgICAgIC8vIGNvdXQgPDwgInZhbDogIiA8PCB2YWwgPDwgZW5kbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgIGlmKGRpc1tuaV1bbmpdID4gdmFsIC0gY3N0KXsKICAgICAgICAgICAgICAgIGRpc1tuaV1bbmpdID0gdmFsIC0gY3N0IDsKICAgICAgICAgICAgICAgIHEucHVzaCh7LXZhbCArIGNzdCwgbmksbmp9KTsKICAgICAgICAgICAgICAgIHBhcmVudFtuaV1bbmpdID0ge2ksIGp9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9Cgp2b2lkIHByaW50KGludCB4LCBpbnQgeSwgaW50IGksIGludCBqKXsKLy8gaXMKICAgIGNvdXQgPDwgJygnIDw8IHkgPDwgJywnIDw8IHggPDwgJyknIDw8ICcgJzsKICAgIGFkZGVkW3hdW3ldID0gMTsKICAgIGlmKHggPT0gaSAmJiB5ID09IGopCiAgICAgICAgcmV0dXJuOwogICAgcHJpbnQocGFyZW50W3hdW3ldLmZpcnN0LCBwYXJlbnRbeF1beV0uc2Vjb25kLCBpLCBqKTsKfQoKdm9pZCBzb2x2ZSgpewoKCiAgICBjaW4gPj4gbiA+PiBtID4+IGQ7CiAgICAKICAgIC8vICM6IDAsIEM6IDEsIE46IDIsIEQ6IDUgCiAgICBncmlkLmFzc2lnbihuLCB2ZWN0b3I8Y2hhcj4gKG0sIC0xKSk7CiAgICBhZGRlZC5hc3NpZ24obiwgdmVjdG9yPGJvb2w+IChtLCAwKSk7CiAgICAvLyB2aXMuYXNzaWduKG4sIHZlY3RvcjxpbnQ+IChtLCAwKSk7CiAgICAvLyBkaXMuYXNzaWduKG4sIHZlY3Rvcjxsb25nIGRvdWJsZT4gKG0sIDJlMTgpKTsKICAgIHBhcmVudC5hc3NpZ24obiwgdmVjdG9yPHBhaXI8aW50LCBpbnQ+PiAobSwgey0xLCAtMX0pKTsKICAgIHZlY3RvcjxwYWlyPGludCwgaW50Pj4gc3RhcnQoZCArIDEsIHstMSwgLTF9KSwgZmluaXNoKGQgKyAxLCB7LTEsIC0xfSk7CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgbjsgaSsrKXsKICAgICAgICBmb3IoaW50IGogPSAwOyBqIDwgbTsgaisrKXsKICAgICAgICAgICAgc3RyaW5nIGNlbGw7CiAgICAgICAgICAgIGNpbiA+PiBjZWxsOwogICAgICAgICAgICBpZihjZWxsLmJhY2soKSA9PSAnfScpewogICAgICAgICAgICAgICAgaW50IGN1cnIgPSAwOwogICAgICAgICAgICAgICAgZm9yKGludCBrID0gMjsgayA8IGNlbGwuc2l6ZSgpOyBrKyspewogICAgICAgICAgICAgICAgICAgIGlmKGNlbGxba10gPT0gJywnIHx8IGNlbGxba10gPT0gJ30nKXsKICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXJ0W2N1cnJdID09IG1ha2VfcGFpcigtMSwgLTEpID8gc3RhcnRbY3Vycl0gOiBmaW5pc2hbY3Vycl0pID0ge2ksIGp9OwogICAgICAgICAgICAgICAgICAgICAgICBjdXJyID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGN1cnIgPSBjdXJyICogMTAgKyAoY2VsbFtrXSAtICcwJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBncmlkW2ldW2pdID0gY2VsbFswXTsKICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgICBpZihjZWxsWzBdID09ICcjJyl7CiAgICAgICAgICAgICAgICAgICAgZ3JpZFtpXVtqXSA9ICcjJzsKICAgICAgICAgICAgICAgIH1lbHNlIGlmKGNlbGxbMF0gPT0gJ0MnKXsKICAgICAgICAgICAgICAgICAgICBncmlkW2ldW2pdID0gJ0MnOwogICAgICAgICAgICAgICAgfWVsc2UgaWYoY2VsbFswXSA9PSAnTicpewogICAgICAgICAgICAgICAgICAgIGdyaWRbaV1bal0gPSAnTic7CiAgICAgICAgICAgICAgICB9ZWxzZSBpZihjZWxsWzBdID09ICdEJyl7CiAgICAgICAgICAgICAgICAgICAgZ3JpZFtpXVtqXSA9ICdEJzsKICAgICAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgICAgIGludCB4ID0gc3RvaShjZWxsKTsKICAgICAgICAgICAgICAgICAgICAoc3RhcnRbeF0gPT0gbWFrZV9wYWlyKC0xLCAtMSkgPyBzdGFydFt4XSA6IGZpbmlzaFt4XSkgPSB7aSwgan07CiAgICAgICAgICAgICAgICAgICAgZ3JpZFtpXVtqXSA9ICdDJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIAoKICAgIGZvcihpbnQgZGF5ID0gMTsgZGF5IDw9IGQ7IGRheSsrKXsKICAgICAgICBkaWprc3RyYShzdGFydFtkYXldLCBmaW5pc2hbZGF5XSwgZGF5KTsKICAgICAgICBhdXRvIFt4LCB5XSA9IGZpbmlzaFtkYXldOwogICAgICAgIC8vIGNvdXQgPDwgZGlzW3hdW3ldIDw8IGVuZGw7CiAgICAgICAgcHJpbnQoeCwgeSwgc3RhcnRbZGF5XS5maXJzdCwgc3RhcnRbZGF5XS5zZWNvbmQpOwogICAgICAgIGNvdXQgPDwgZW5kbDsKICAgICAgICAvLyBpZihkYXkgPT0gODIpewogICAgICAgIC8vICAgICBicmVhazsKICAgICAgICAvLyB9CiAgICB9CgoKCgoKfQoKaW50MzJfdCBtYWluKCl7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsKCiAgICBpbjsKICAgIG91dDsKICAgIAogICAgaW50IHQgPSAxOwogICAgLy8gY2luID4+IHQ7CgogICAgd2hpbGUodC0tKQogICAgICAgIHNvbHZlKCk7CgogICAgcmV0dXJuIDA7Cn0=