#include <bits/stdc++.h>   using namespace std;   ;   clock_t start;   mt19937_64 rng(chrono::system_clock::now().time_since_epoch().count());   const long long N = 501, lmx = 11;   long long mx[N][N][lmx][lmx], n, m, q, col[4][N][N], logg[N];   long long sum(long long k, long long r1, long long c1, long long r2,                 long long c2) {     return col[k][r2][c2] - col[k][r2][c1] - col[k][r1][c2] + col[k][r1][c1];   }   void sparse() {     for (long long i = 2; i < N; i++) logg[i] = logg[i / 2] + 1;     for (long long lgi = 1; lgi < lmx; lgi++) {       for (long long i = 1; i <= n; i++) {         for (long long j = 1; j <= m; j++) {           if (i + (1 << (lgi - 1)) <= n)             mx[i][j][lgi][0] = max(mx[i][j][lgi - 1][0],                                    mx[i + (1 << (lgi - 1))][j][lgi - 1][0]);         }       }     }     for (long long lgi = 0; lgi < lmx; lgi++) {       for (long long lgj = 1; lgj < lmx; lgj++) {         for (long long i = 1; i <= n; i++) {           for (long long j = 1; j <= m; j++) {             long long k = lgj - 1;             if (j + (1 << k) <= m)               mx[i][j][lgi][lgj] =                   max(mx[i][j][lgi][k], mx[i][j + (1 << k)][lgi][k]);           }         }       }     }   }   long long query(long long r1, long long c1, long long r2, long long c2) {     if (r1 > r2 || c1 > c2) return 0;     long long k1 = logg[r2 - r1 + 1], k2 = logg[c2 - c1 + 1];     long long m1 = max(mx[r1][c1][k1][k2], mx[r2 - (1 << k1) + 1][c1][k1][k2]);     long long m2 = max(mx[r1][c2 - (1 << k2) + 1][k1][k2],                        mx[r2 - (1 << k1) + 1][c2 - (1 << k2) + 1][k1][k2]);     return max(m1, m2);   }   void solve() {     string s, ss =  RGYB ;     cin >> n >> m >> q;     for (long long i = 0; i < n; i++) {       cin >> s;       for (long long j = 0; j < m; j++) {         for (long long k = 0; k < 4; k++)           if (ss[k] == s[j]) col[k][i + 1][j + 1] = 1;       }     }     for (long long k = 0; k < 4; k++) {       for (long long i = 1; i <= n; i++)         for (long long j = 1; j <= m; j++)           col[k][i][j] +=               col[k][i - 1][j] + col[k][i][j - 1] - col[k][i - 1][j - 1];     }     for (long long i = 1; i <= n; i++) {       for (long long j = 1; j <= m; j++) {         long long lim = min(min(i, j), min(n - i, m - j));         for (long long len = 1; len <= lim; len++) {           if (sum(0, i - len, j - len, i, j) != len * len) break;           if (sum(1, i - len, j, i, j + len) != len * len) break;           if (sum(2, i, j - len, i + len, j) != len * len) break;           if (sum(3, i, j, i + len, j + len) != len * len) break;           mx[i][j][0][0] = len * len;         }       }     }     sparse();     while (q--) {       long long r1, c1, r2, c2, ans = 0;       cin >> r1 >> c1 >> r2 >> c2;       long long s = 1, e = min(r2 - r1 + 1, c2 - c1 + 1);       while (s <= e) {         long long mid = (s + e) / 2;         if (query(r1 + mid - 1, c1 + mid - 1, r2 - mid, c2 - mid) >= mid * mid) {           s = mid + 1, ans = mid;         } else           e = mid - 1;       }       cout << 4 * ans * ans <<   n ;     }   }   signed main() {     ios_base::sync_with_stdio(0);     cin.tie(0);     cout.tie(0);     long long t = 1;     start = clock();     cout << fixed << setprecision(15);     while (t--) {       solve();     }     double time_taken = double(clock() - start) / double(CLOCKS_PER_SEC);     cerr << time_taken;   }