#include <bits/stdc++.h>
#define ll long long
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define ROF(i,a,b) for(int i=a;i>=b;i--)
#define pi pair<int,int>
#define pii pair<int,pi>
#define fi first
#define se second
#define pb push_back
#define all(x) x.begin(), x.end()
#define sz(a) (int) a.size()
#define endl '\n'
#define data "board"
using namespace std;
const ll linf = 1e18;
const int inf = 1e9;
const int MOD = 1e7 + 1203, N = 1600;
void add(int &a, int b)
{
a += b;
if(a>=MOD)
a-=MOD;
if(a<0)
a += MOD;
}
int modulo(int x)
{
if(x<=1)
return 1;
return (MOD - MOD/x) * modulo(MOD/x) % MOD;
}
int mul(int a, int b)
{
return (1ll *a * b) % MOD;
}
int n, m, q;
char a[N+3][N+3];
int h[N+3];
int L[N+3], R[N+3];
int div2;
void inp(void)
{
cin >> n >> m >> q;
FOR(i, 1, n)
{
FOR(j, 1, m) cin >> a[i][j];
}
}
int pw(int a, int b)
{
int ret = 1;
while(b > 0)
{
if(b & 1) ret = mul(ret, a);
a = mul(a, a);
b >>= 1;
}
return ret;
}
ll calc(void)
{
FOR(j, 1, m) h[j] = 0;
ll ret = 0;
FOR(i, 1, n)
{
stack<int> st;
st.push(0);
FOR(j, 1, m) L[j] = R[j] = j;
FOR(j, 1, m)
{
if(a[i][j] == '.') h[j] = 0;
else ++h[j];
while(!st.empty() && h[st.top()] >= h[j])
{
L[j] = L[st.top()];
st.pop();
}
st.push(j);
}
while(!st.empty()) st.pop();
st.push(m+1);
ROF(j, m, 1)
{
while(!st.empty() && h[st.top()] > h[j])
{
R[j] = R[st.top()];
st.pop();
}
st.push(j);
int lenR = R[j] - j + 1;
int lenL = j - L[j] + 1;
ll sumR = 1ll * lenR * (j+1 + R[j]+1) / 2;
ll sumL = 1ll * lenL * (L[j] + j) / 2;
ll tmp = 1ll * lenL * sumR - 1ll * lenR * sumL;
tmp *= (1ll * h[j] * (h[j] + 1)) / 2;
ret += tmp;
}
}
return ret;
}
void solve(void)
{
h[0] = h[m+1] = -inf;
div2 = pw(2, MOD - 2);
cout << calc() % MOD << ' ';
FOR(_, 1, q)
{
int x1, x2, y1, y2; cin >> x1 >> x2 >> y1 >> y2;
FOR(i, x1, x2)
{
FOR(j, y1, y2) a[i][j] = 'X';
}
cout << calc() % MOD << ' ';
}
}
signed main()
{
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
if(fopen(data".inp", "r"))
{
freopen(data".inp","r",stdin);
freopen(data".out","w",stdout);
}
inp();
solve();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgRk9SKGksYSxiKSBmb3IoaW50IGk9YTtpPD1iO2krKykKI2RlZmluZSBST0YoaSxhLGIpIGZvcihpbnQgaT1hO2k+PWI7aS0tKQojZGVmaW5lIHBpIHBhaXI8aW50LGludD4KI2RlZmluZSBwaWkgcGFpcjxpbnQscGk+CiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBhbGwoeCkgeC5iZWdpbigpLCB4LmVuZCgpCiNkZWZpbmUgc3ooYSkgKGludCkgYS5zaXplKCkKI2RlZmluZSBlbmRsICdcbicKI2RlZmluZSBkYXRhICJib2FyZCIKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNvbnN0IGxsIGxpbmYgPSAxZTE4Owpjb25zdCBpbnQgaW5mID0gMWU5Owpjb25zdCBpbnQgTU9EID0gMWU3ICsgMTIwMywgTiA9IDE2MDA7Cgp2b2lkIGFkZChpbnQgJmEsIGludCBiKQp7CiAgICBhICs9IGI7CiAgICBpZihhPj1NT0QpCiAgICAgICAgYS09TU9EOwogICAgaWYoYTwwKQogICAgICAgIGEgKz0gTU9EOwp9CgppbnQgbW9kdWxvKGludCB4KQp7CiAgICBpZih4PD0xKQogICAgICAgIHJldHVybiAxOwogICAgcmV0dXJuIChNT0QgLSBNT0QveCkgKiBtb2R1bG8oTU9EL3gpICUgTU9EOwp9CgppbnQgbXVsKGludCBhLCBpbnQgYikKewogICAgcmV0dXJuICgxbGwgKmEgKiBiKSAlIE1PRDsKfQoKaW50IG4sIG0sIHE7CmNoYXIgYVtOKzNdW04rM107CmludCBoW04rM107CmludCBMW04rM10sIFJbTiszXTsKaW50IGRpdjI7Cgp2b2lkIGlucCh2b2lkKQp7CiAgICBjaW4gPj4gbiA+PiBtID4+IHE7CiAgICBGT1IoaSwgMSwgbikKICAgIHsKICAgICAgICBGT1IoaiwgMSwgbSkgY2luID4+IGFbaV1bal07CiAgICB9Cn0KCmludCBwdyhpbnQgYSwgaW50IGIpCnsKICAgIGludCByZXQgPSAxOwogICAgd2hpbGUoYiA+IDApCiAgICB7CiAgICAgICAgaWYoYiAmIDEpIHJldCA9IG11bChyZXQsIGEpOwogICAgICAgIGEgPSBtdWwoYSwgYSk7CiAgICAgICAgYiA+Pj0gMTsKICAgIH0KICAgIHJldHVybiByZXQ7Cn0KCmxsIGNhbGModm9pZCkKewogICAgRk9SKGosIDEsIG0pIGhbal0gPSAwOwogICAgbGwgcmV0ID0gMDsKCiAgICBGT1IoaSwgMSwgbikKICAgIHsKICAgICAgICBzdGFjazxpbnQ+IHN0OwogICAgICAgIHN0LnB1c2goMCk7CiAgICAgICAgRk9SKGosIDEsIG0pIExbal0gPSBSW2pdID0gajsKCiAgICAgICAgRk9SKGosIDEsIG0pCiAgICAgICAgewogICAgICAgICAgICBpZihhW2ldW2pdID09ICcuJykgaFtqXSA9IDA7CiAgICAgICAgICAgIGVsc2UgKytoW2pdOwoKICAgICAgICAgICAgd2hpbGUoIXN0LmVtcHR5KCkgJiYgaFtzdC50b3AoKV0gPj0gaFtqXSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTFtqXSA9IExbc3QudG9wKCldOwogICAgICAgICAgICAgICAgc3QucG9wKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc3QucHVzaChqKTsKICAgICAgICB9CgogICAgICAgIHdoaWxlKCFzdC5lbXB0eSgpKSBzdC5wb3AoKTsKICAgICAgICBzdC5wdXNoKG0rMSk7CgogICAgICAgIFJPRihqLCBtLCAxKQogICAgICAgIHsKICAgICAgICAgICAgd2hpbGUoIXN0LmVtcHR5KCkgJiYgaFtzdC50b3AoKV0gPiBoW2pdKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBSW2pdID0gUltzdC50b3AoKV07CiAgICAgICAgICAgICAgICBzdC5wb3AoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBzdC5wdXNoKGopOwoKICAgICAgICAgICAgaW50IGxlblIgPSBSW2pdIC0gaiArIDE7CiAgICAgICAgICAgIGludCBsZW5MID0gaiAtIExbal0gKyAxOwogICAgICAgICAgICBsbCBzdW1SID0gMWxsICogbGVuUiAqIChqKzEgKyBSW2pdKzEpIC8gMjsKICAgICAgICAgICAgbGwgc3VtTCA9IDFsbCAqIGxlbkwgKiAoTFtqXSArIGopIC8gMjsKICAgICAgICAgICAgbGwgdG1wID0gMWxsICogbGVuTCAqIHN1bVIgLSAxbGwgKiBsZW5SICogc3VtTDsKICAgICAgICAgICAgdG1wICo9ICgxbGwgKiBoW2pdICogKGhbal0gKyAxKSkgLyAyOwogICAgICAgICAgICByZXQgKz0gdG1wOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gcmV0Owp9Cgp2b2lkIHNvbHZlKHZvaWQpCnsKICAgIGhbMF0gPSBoW20rMV0gPSAtaW5mOwogICAgZGl2MiA9IHB3KDIsIE1PRCAtIDIpOwogICAgY291dCA8PCBjYWxjKCkgJSBNT0QgPDwgJyAnOwogICAgRk9SKF8sIDEsIHEpCiAgICB7CiAgICAgICAgaW50IHgxLCB4MiwgeTEsIHkyOyBjaW4gPj4geDEgPj4geDIgPj4geTEgPj4geTI7CiAgICAgICAgRk9SKGksIHgxLCB4MikKICAgICAgICB7CiAgICAgICAgICAgIEZPUihqLCB5MSwgeTIpIGFbaV1bal0gPSAnWCc7CiAgICAgICAgfQogICAgICAgIGNvdXQgPDwgY2FsYygpICUgTU9EIDw8ICcgJzsKICAgIH0KfQoKc2lnbmVkIG1haW4oKQp7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CgogICAgaWYoZm9wZW4oZGF0YSIuaW5wIiwgInIiKSkKICAgIHsKICAgICAgICBmcmVvcGVuKGRhdGEiLmlucCIsInIiLHN0ZGluKTsKICAgICAgICBmcmVvcGVuKGRhdGEiLm91dCIsInciLHN0ZG91dCk7CiAgICB9CgogICAgaW5wKCk7CiAgICBzb2x2ZSgpOwogICAgcmV0dXJuIDA7Cn0K