/****************************************************
* Author : duc viet
* From : HSGS Tran Phu, Hai Phong
* Created : 2026-11-03 10:47:53
****************************************************/
#include <bits/stdc++.h>
using namespace std;
#define LOCAL
#define fi first
#define se second
#define left ___left
#define right ___right
#define int long long
#define TIME (1.0 * clock() / CLOCKS_PER_SEC)
#define MASK(i) (1LL << (i))
#define BIT(x, i) ((x) >> (i) & 1)
#define __builtin_popcount __builtin_popcountll
#define ALL(v) (v).begin(), (v).end()
#define REP(i, n) for (int i = 0, _n = (n); i < _n; ++i)
#define REPD(i, n) for (int i = (n); i-- > 0; )
#define FOR(i, a, b) for (int i = (a), _b = (b); i < _b; ++i)
#define FORD(i, b, a) for (int i = (b), _a = (a); --i >= _a; )
#define FORE(i, a, b) for (int i = (a), _b = (b); i <= _b; ++i)
#define FORDE(i, b, a) for (int i = (b), _a = (a); i >= _a; --i)
#define scan_op(...) istream & operator >> (istream &in, __VA_ARGS__ &u)
#define print_op(...) ostream & operator << (ostream &out, const __VA_ARGS__ &u)
template < class U, class V> scan_op( pair < U, V> ) { return in >> u.first >> u.second ; }
template < class T> scan_op( vector < T> ) { for ( size_t i = 0 ; i < u.size ( ) ; ++ i) in >> u[ i] ; return in; }
template < class U, class V> print_op( pair < U, V> ) { return out << '(' << u.first << ", " << u.second << ')' ; }
template < size_t i, class T> ostream & print_tuple_utils( ostream & out, const T & tup) { if constexpr( i == tuple_size< T> :: value ) return out << ")" ; else return print_tuple_utils< i + 1 , T> ( out << ( i ? ", " : "(" ) << get< i> ( tup) , tup) ; }
template < class ...U > print_op( tuple< U...> ) { return print_tuple_utils< 0 , tuple< U...>> ( out, u) ; }
template < class Con, class = decltype( begin( declval< Con> ( ) ) ) > typename enable_if < ! is_same< Con, string> :: value , ostream& > :: type operator << ( ostream & out, const Con & con) { out << '{' ; for ( __typeof( con.begin ( ) ) it = con.begin ( ) ; it ! = con.end ( ) ; ++ it) out << ( it == con.begin ( ) ? "" : ", " ) << * it; return out << '}' ; }
#ifdef LOCAL
// #include "debug.h"
#else
#define file(name) if (fopen(name".inp", "r")) { freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout); }
#define DB(...) 23
#define db(...) 23
#define debug(...) 23
#endif
const int N = 1e6 + 5 ;
const int mod = 1e9 + 7 ;
char grid[ 1010 ] [ 1010 ] ;
int d[ 1010 ] [ 1010 ] ;
int dx[ 4 ] = { 1 , - 1 , 0 , 0 } ;
int dy[ 4 ] = { 0 , 0 , 1 , - 1 } ;
int n, m, q;
void bfs( ) {
deque< pair< int , int >> dq;
for ( int i = 1 ; i <= m; i++ ) {
for ( int j = 1 ; j <= n; j++ ) {
if ( grid[ i] [ j] == '*' ) {
d[ i] [ j] = 0 ;
dq.push_back ( { i, j} ) ;
}
else d[ i] [ j] = LLONG_MAX;
}
}
while ( ! dq.empty ( ) ) {
pair< int , int > p = dq.front ( ) ; dq.pop_front ( ) ;
int x = p.first ;
int y = p.second ;
for ( int i = 0 ; i < 4 ; i++ ) {
int xi = x + dx[ i] ;
int yi = y + dy[ i] ;
if ( xi < 1 || xi > m || yi < 1 || yi > n) continue ;
int w;
if ( grid[ xi] [ yi] ! = grid[ x] [ y] ) w = 1 ;
else w = 0 ;
if ( d[ x] [ y] + w < d[ xi] [ yi] ) {
d[ xi] [ yi] = d[ x] [ y] + w;
if ( w == 0 ) dq.push_front ( { xi, yi} ) ;
else dq.push_back ( { xi, yi} ) ;
}
}
}
}
void Solve( ) {
cin >> m >> n >> q;
for ( int i = 1 ; i <= m; i++ ) cin >> ( grid[ i] + 1 ) ;
bfs( ) ;
while ( q-- ) {
int x, y ; cin >> x >> y;
cout << d[ x] [ y] << endl;
}
}
signed main( ) {
ios:: sync_with_stdio ( false ) ;
cin .tie ( nullptr) ;
// file(ILOVEHD);
Solve( ) ;
#ifdef LOCAL
cerr << "\n -------------------\n " ;
cerr << "Time elapsed: " << TIME << " s\n " ;
#endif
return 0 ;
}
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQXV0aG9yICA6IGR1YyB2aWV0CiAqIEZyb20gICAgOiBIU0dTIFRyYW4gUGh1LCBIYWkgUGhvbmcKICogQ3JlYXRlZCA6IDIwMjYtMTEtMDMgMTA6NDc6NTMKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBMT0NBTAojZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBmaSBmaXJzdAojZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBzZSBzZWNvbmQKI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBsZWZ0IF9fX2xlZnQKI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICByaWdodCBfX19yaWdodAojZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIGludCBsb25nIGxvbmcKI2RlZmluZSAgICAgICAgICAgVElNRSAgKDEuMCAqIGNsb2NrKCkgLyBDTE9DS1NfUEVSX1NFQykKI2RlZmluZSAgICAgICAgICAgICAgICAgICAgTUFTSyhpKSAgKDFMTCA8PCAoaSkpCiNkZWZpbmUgICAgICAgICAgICAgICAgIEJJVCh4LCBpKSAgKCh4KSA+PiAoaSkgJiAxKQojZGVmaW5lICAgICAgICAgIF9fYnVpbHRpbl9wb3Bjb3VudCAgX19idWlsdGluX3BvcGNvdW50bGwKI2RlZmluZSAgICAgICAgICAgICAgICAgQUxMKHYpICAodikuYmVnaW4oKSwgKHYpLmVuZCgpCiNkZWZpbmUgICAgICAgICAgICAgIFJFUChpLCBuKSAgZm9yIChpbnQgaSA9IDAsIF9uID0gKG4pOyBpIDwgX247ICsraSkKI2RlZmluZSAgICAgICAgICAgICBSRVBEKGksIG4pICBmb3IgKGludCBpID0gKG4pOyBpLS0gPiAwOyApCiNkZWZpbmUgICAgICAgICAgICAgRk9SKGksIGEsIGIpICBmb3IgKGludCBpID0gKGEpLCBfYiA9IChiKTsgaSA8IF9iOyArK2kpCiNkZWZpbmUgICAgICAgICAgRk9SRChpLCBiLCBhKSAgZm9yIChpbnQgaSA9IChiKSwgX2EgPSAoYSk7IC0taSA+PSBfYTsgKQojZGVmaW5lICAgICAgICAgICAgRk9SRShpLCBhLCBiKSAgZm9yIChpbnQgaSA9IChhKSwgX2IgPSAoYik7IGkgPD0gX2I7ICsraSkKI2RlZmluZSAgICAgICAgIEZPUkRFKGksIGIsIGEpICBmb3IgKGludCBpID0gKGIpLCBfYSA9IChhKTsgaSA+PSBfYTsgLS1pKQojZGVmaW5lICAgICAgICAgICAgIHNjYW5fb3AoLi4uKSAgaXN0cmVhbSAmIG9wZXJhdG9yID4+IChpc3RyZWFtICZpbiwgX19WQV9BUkdTX18gJnUpCiNkZWZpbmUgICAgICAgICAgICBwcmludF9vcCguLi4pICBvc3RyZWFtICYgb3BlcmF0b3IgPDwgKG9zdHJlYW0gJm91dCwgY29uc3QgX19WQV9BUkdTX18gJnUpCgp0ZW1wbGF0ZSA8Y2xhc3MgVSwgY2xhc3MgVj4gc2Nhbl9vcChwYWlyIDxVLCBWPikgIHsgcmV0dXJuIGluID4+IHUuZmlyc3QgPj4gdS5zZWNvbmQ7IH0KdGVtcGxhdGUgPGNsYXNzIFQ+IHNjYW5fb3AodmVjdG9yIDxUPikgIHsgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB1LnNpemUoKTsgKytpKSBpbiA+PiB1W2ldOyByZXR1cm4gaW47IH0KdGVtcGxhdGUgPGNsYXNzIFUsIGNsYXNzIFY+IHByaW50X29wKHBhaXIgPFUsIFY+KSAgeyByZXR1cm4gb3V0IDw8ICcoJyA8PCB1LmZpcnN0IDw8ICIsICIgPDwgdS5zZWNvbmQgPDwgJyknOyB9CnRlbXBsYXRlIDxzaXplX3QgaSwgY2xhc3MgVD4gb3N0cmVhbSAmIHByaW50X3R1cGxlX3V0aWxzKG9zdHJlYW0gJm91dCwgY29uc3QgVCAmdHVwKSB7IGlmIGNvbnN0ZXhwcihpID09IHR1cGxlX3NpemU8VD46OnZhbHVlKSByZXR1cm4gb3V0IDw8ICIpIjsgIGVsc2UgcmV0dXJuIHByaW50X3R1cGxlX3V0aWxzPGkgKyAxLCBUPihvdXQgPDwgKGkgPyAiLCAiIDogIigiKSA8PCBnZXQ8aT4odHVwKSwgdHVwKTsgfQp0ZW1wbGF0ZSA8Y2xhc3MgLi4uVT4gcHJpbnRfb3AodHVwbGU8VS4uLj4pIHsgcmV0dXJuIHByaW50X3R1cGxlX3V0aWxzPDAsIHR1cGxlPFUuLi4+PihvdXQsIHUpOyB9CnRlbXBsYXRlIDxjbGFzcyBDb24sIGNsYXNzID0gZGVjbHR5cGUoYmVnaW4oZGVjbHZhbDxDb24+KCkpKT4gdHlwZW5hbWUgZW5hYmxlX2lmIDwhaXNfc2FtZTxDb24sIHN0cmluZz46OnZhbHVlLCBvc3RyZWFtJj46OnR5cGUgb3BlcmF0b3IgPDwgKG9zdHJlYW0gJm91dCwgY29uc3QgQ29uICZjb24pIHsgb3V0IDw8ICd7JzsgZm9yIChfX3R5cGVvZihjb24uYmVnaW4oKSkgaXQgPSBjb24uYmVnaW4oKTsgaXQgIT0gY29uLmVuZCgpOyArK2l0KSBvdXQgPDwgKGl0ID09IGNvbi5iZWdpbigpID8gIiIgOiAiLCAiKSA8PCAqaXQ7IHJldHVybiBvdXQgPDwgJ30nOyB9CgojaWZkZWYgTE9DQUwKICAgIC8vICNpbmNsdWRlICJkZWJ1Zy5oIgojZWxzZQogICAgI2RlZmluZSBmaWxlKG5hbWUpIGlmIChmb3BlbihuYW1lIi5pbnAiLCAiciIpKSB7IGZyZW9wZW4obmFtZSIuaW5wIiwgInIiLCBzdGRpbik7IGZyZW9wZW4obmFtZSIub3V0IiwgInciLCBzdGRvdXQpOyB9CiAgICAjZGVmaW5lIERCKC4uLikgMjMKICAgICNkZWZpbmUgZGIoLi4uKSAyMwogICAgI2RlZmluZSBkZWJ1ZyguLi4pIDIzCiNlbmRpZgoKCmNvbnN0IGludCBOID0gMWU2ICsgNTsKY29uc3QgaW50IG1vZCA9IDFlOSArIDc7CgoKY2hhciBncmlkWzEwMTBdWzEwMTBdOwppbnQgZFsxMDEwXVsxMDEwXTsKCmludCBkeFs0XSA9IHsxLCAtMSwgMCwgMH07CmludCBkeVs0XSA9IHswLCAwLCAxLCAtMX07CgppbnQgbiwgbSwgcTsKCgp2b2lkIGJmcygpIHsKICAgIGRlcXVlPHBhaXI8aW50LCBpbnQ+PiBkcTsKCiAgICBmb3IgKGludCBpID0gMSA7IGkgPD0gbTsgaSsrKSB7CiAgICAgICAgZm9yIChpbnQgaiA9IDE7IGogPD0gbjsgaisrKSB7CiAgICAgICAgICAgIGlmIChncmlkW2ldW2pdID09ICcqJykgewogICAgICAgICAgICAgICAgZFtpXVtqXSA9IDA7CiAgICAgICAgICAgICAgICBkcS5wdXNoX2JhY2soe2ksIGp9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGRbaV1bal0gPSBMTE9OR19NQVg7CiAgICAgICAgfQogICAgfQoKICAgIHdoaWxlICghZHEuZW1wdHkoKSkgewogICAgICAgIHBhaXI8aW50LCBpbnQ+IHAgPSBkcS5mcm9udCgpOyBkcS5wb3BfZnJvbnQoKTsgCgogICAgICAgIGludCB4ID0gcC5maXJzdDsKICAgICAgICBpbnQgeSA9IHAuc2Vjb25kOwoKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgewogICAgICAgICAgICBpbnQgeGkgPSB4ICsgZHhbaV07CiAgICAgICAgICAgIGludCB5aSA9IHkgKyBkeVtpXTsKCiAgICAgICAgICAgIGlmICh4aSA8IDEgfHwgeGkgPiBtIHx8IHlpIDwgMSB8fCB5aSA+IG4pIGNvbnRpbnVlOyAKICAgICAgICAgICAgCiAgICAgICAgICAgIGludCB3OwogICAgICAgICAgICBpZiAoZ3JpZFt4aV1beWldICE9IGdyaWRbeF1beV0pIHcgPSAxOwogICAgICAgICAgICBlbHNlIHcgPSAwOwoKICAgICAgICAgICAgaWYgKGRbeF1beV0gKyB3IDwgZFt4aV1beWldKSB7CiAgICAgICAgICAgICAgICBkW3hpXVt5aV0gPSBkW3hdW3ldICsgdzsKCiAgICAgICAgICAgICAgICBpZiAodyA9PSAwKSBkcS5wdXNoX2Zyb250KHt4aSwgeWl9KTsKICAgICAgICAgICAgICAgIGVsc2UgZHEucHVzaF9iYWNrKHt4aSwgeWl9KTsgCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KCgp2b2lkIFNvbHZlKCl7CiAgICBjaW4gPj4gbSA+PiBuID4+IHE7IAoKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG07IGkrKykgY2luID4+IChncmlkW2ldICsgMSk7CiAgICBiZnMoKTsKCiAgICB3aGlsZSAocS0tKSB7CiAgICAgICAgaW50IHgsIHkgOyBjaW4gPj4geCA+PiB5OwoKICAgICAgICBjb3V0IDw8IGRbeF1beV0gPDwgZW5kbDsgCiAgICB9Cn0KCgpzaWduZWQgbWFpbigpewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShudWxscHRyKTsKICAgIAogICAgLy8gZmlsZShJTE9WRUhEKTsKICAgIAogICAgU29sdmUoKTsKCiAgICAjaWZkZWYgTE9DQUwKICAgICAgICBjZXJyIDw8ICJcbi0tLS0tLS0tLS0tLS0tLS0tLS1cbiI7CiAgICAgICAgY2VyciA8PCAiVGltZSBlbGFwc2VkOiAiIDw8IFRJTUUgPDwgIiBzXG4iOwogICAgI2VuZGlmCiAgICAKICAgIHJldHVybiAwOwp9