#include using namespace std; using ll = long long; const ll MOD = 167772161, N = 2e5; ll n, flock_count; ll illuminated[50][50], bird[50][50]; ll flock[50][50], used[50][50], an[50][50]; ll peak[50][50], att[50][50]; set unq; string s[50]; bool ooa(ll x, ll y) { if (x < 0 || x >= n) return true; if (y < 0 || y >= n) return true; return false; } ll illuminate(ll x, ll y) { ll sum = 0; for (ll dx : {-1, 0, 1}) { for (ll dy : {-1, 0, 1}) { if (!dx && !dy) continue; for (ll k = 1; k <= n; k++) { ll x1 = x + dx * k; ll y1 = y + dy * k; if (ooa(x1, y1)) break; if (s[x1][y1] != ' ') { if (!illuminated[x1][y1] && s[x1][y1] != '*') sum += 100; illuminated[x1][y1] = 1; break; } } } } return sum; } ll rule_ill_sun() { ll sum = 0; for (ll i = 0; i < n; i++) { for (ll j = 0; j < n; j++) { if (s[i][j] == '*') { sum += illuminate(i, j); } } } return sum; } ll handle_flock(ll i, ll j) { ll sum = 0; flock_count++; ll ptr = flock_count; queue> q; q.push({i, j}); while (!q.empty()) { ll x = q.front().first; ll y = q.front().second; q.pop(); if (ooa(x, y)) continue; if (flock[x][y]) continue; if (!bird[x][y]) continue; flock[x][y] = ptr; q.push({x - 1, y}); q.push({x, y - 1}); q.push({x, y + 1}); q.push({x + 1, y}); } ll width = 0; for (ll i = 0; i < n; i++) { ll len = 0; for (ll j = 0; j < n; j++) { if (flock[i][j] == ptr) len++; else len = 0; width = max(width, len); } } sum += 500 * width; for (ll x = 0; x < n; x++) { for (ll y = 0; y < n; y++) { if (flock[x][y] != ptr) continue; if (ooa(x - 1, y) || flock[x-1][y] != ptr) sum += 60; if (ooa(x, y - 1) || flock[x][y-1] != ptr) sum += 60; if (ooa(x, y + 1) || flock[x][y+1] != ptr) sum += 60; if (ooa(x + 1, y) || flock[x+1][y] != ptr) sum += 60; } } return sum; } ll rule_birds() { ll sum = 0; for (ll i = 0; i < n; i++) { for (ll j = 0; j < n; j++) { bird[i][j] = (s[i][j] == 'v' || s[i][j] == 'D'); } } for (ll i = 0; i < n; i++) { for (ll j = 0; j < n; j++) { if (bird[i][j] && !flock[i][j]) { sum += handle_flock(i, j); } } } return sum; } ll rule_house_view() { ll sum = 0; for (ll i = 0; i < n; i++) { for (ll j = 0; j < n; j++) { if (s[i][j] == '^') { for (ll k = 1; k < n; k++) { if (ooa(i - k, j)) break; if (s[i-k][j] != ' ') break; sum += 10; } } } } return sum; } ll rule_unique() { for (ll i = 0; i < n - 2; i++) { for (ll j = 0; j < n - 2; j++) { string p; for (ll dx = 0; dx < 3; dx++) { for (ll dy = 0; dy < 3; dy++) { p += s[i+dx][j+dy]; } } unq.insert(p); } } return unq.size(); } ll rule_animals_I() { ll sum = 0; for (ll i = 0; i < n; i++) { for (ll j = 0; j < n; j++) { an[i][j] = (s[i][j] == '!' || s[i][j] == 'v' || s[i][j] == 'D'); } } for (ll x = 0; x < n; x++) { for (ll y = 0; y < n; y++) { if (!an[x][y]) continue; if (!ooa(x - 1, y) && s[x-1][y] == ' ') sum += 15; if (!ooa(x, y - 1) && s[x][y-1] == ' ') sum += 15; if (!ooa(x + 1, y) && s[x+1][y] == ' ') sum += 15; if (!ooa(x, y + 1) && s[x][y+1] == ' ') sum += 15; } } return sum; } ll rule_freedom() { ll sum = 0; queue> q; for (ll x = 0; x < n; x++) { for (ll y = 0; y < n; y++) { ll c = 0; if (!ooa(x - 1, y)) c++; if (!ooa(x, y - 1)) c++; if (!ooa(x + 1, y)) c++; if (!ooa(x, y + 1)) c++; if (s[x][y] == ' ' && c < 4) q.push({x, y}); } } while (!q.empty()) { ll x = q.front().first; ll y = q.front().second; q.pop(); if (ooa(x, y)) continue; if (used[x][y]) continue; if (s[x][y] != ' ') continue; used[x][y] = 1; q.push({x - 1, y}); q.push({x, y - 1}); q.push({x + 1, y}); q.push({x, y + 1}); } for (ll i = 0; i < n; i++) { for (ll j = 0; j < n; j++) { ll free = 0, c = 0; if (!ooa(i - 1, j) && used[i-1][j]) free = 1; if (!ooa(i, j - 1) && used[i][j-1]) free = 1; if (!ooa(i + 1, j) && used[i+1][j]) free = 1; if (!ooa(i, j + 1) && used[i][j+1]) free = 1; if (!ooa(i - 1, j)) c++; if (!ooa(i, j - 1)) c++; if (!ooa(i + 1, j)) c++; if (!ooa(i, j + 1)) c++; if (s[i][j] != ' ' && c < 4) free = 1; if (free && s[i][j] != ' ') sum += 7; } } return sum; } ll rule_chupakabra() { ll sum = 0; for (ll i = 0; i < n; i++) { for (ll j = 0; j < n; j++) { if (s[i][j] != '!') continue; for (ll dx = -2; dx <= 2; dx++) { for (ll dy = -2; dy <= 2; dy++) { if (ooa(i + dx, j + dy)) continue; if (abs(dx * dy) == 2 && bird[i + dx][j + dy] && !att[i + dx][j + dy]) { sum += 200; att[i + dx][j + dy] = 1; } } } } } return sum; } ll rule_peak() { ll sum = 0; vector> peaks; for (ll i = 0; i < n; i++) { for (ll j = 0; j < n - 1; j++) { if (s[i][j] == '/' && s[i][j+1] == '\\') { peak[i][j] = 1; peaks.push_back({i, j}); } } } for (auto p1 : peaks) { ll mxv = 0; for (auto p2 : peaks) { mxv = max(mxv, abs(p1.first - p2.first) + abs(p1.second - p2.second)); } sum += mxv * 50; } return sum; } ll rule_drake() { ll sum = 0; for (ll i = 0; i < n; i++) { for (ll j = 0; j < n; j++) { bool grill = false; if (s[i][j] != 'D') continue; if (!ooa(i - 1, j) && s[i-1][j] == 'G') grill = true; if (!ooa(i, j - 1) && s[i][j-1] == 'G') grill = true; if (!ooa(i + 1, j) && s[i+1][j] == 'G') grill = true; if (!ooa(i, j + 1) && s[i][j+1] == 'G') grill = true; if (grill) sum += 500; } } return sum; } ll rule_frequency() { ll sum = 0; map m; for (ll i = 0; i < n; i++) { for (ll j = 0; j < n; j++) { if (s[i][j] != ' ') m[s[i][j]]++; } } if (m.empty()) return 0; ll fr = m.begin()->second; for (auto p : m) { fr = min(fr, p.second); } for (ll i = 0; i < n; i++) { for (ll j = 0; j < n; j++) { if (s[i][j] != ' ' && m[s[i][j]] == fr) { sum += 10; } } } return sum; } ll rule_empty() { ll sum = 0; for (ll i = 0; i < n; i++) { for (ll j = 0; j < n; j++) { if (s[i][j] == ' ') sum++; } } return sum; } ll rule_animals_II() { ll sum = 0; map m; for (ll i = 0; i < n; i++) { for (ll j = 0; j < n; j++) { if (s[i][j] != ' ') m[s[i][j]]++; } } return m['!'] * m['v'] * m['D']; } ll rule_house_view_down() { ll sum = 0; for (ll i = 0; i < n; i++) { for (ll j = 0; j < n; j++) { if (s[i][j] == '^') { for (ll k = 1; k < n; k++) { if (ooa(i - k, j)) break; if (s[i-k][j] != ' ') break; sum += 5; } } } } return sum; } ll rule_grill() { ll sum = 0; for (ll i = 0; i < n; i++) { for (ll j = 0; j < n; j++) { bool grill = false; if (s[i][j] != 'G') continue; if (!ooa(i - 1, j) && s[i-1][j] == 'D') grill = true; if (!ooa(i, j - 1) && s[i][j-1] == 'D') grill = true; if (!ooa(i + 1, j) && s[i+1][j] == 'D') grill = true; if (!ooa(i, j + 1) && s[i][j+1] == 'D') grill = true; if (grill) sum += 50; } } return sum; } ll rule_house_grill() { ll sum = 0; map m; for (ll i = 0; i < n; i++) { for (ll j = 0; j < n; j++) { if (s[i][j] != ' ') m[s[i][j]]++; } } return 3 * min(m['^'], m['G']); } int main() { ios::sync_with_stdio(0); cin >> n; cin.ignore(numeric_limits::max(), '\n'); for (ll i = 0; i < n; i++) { getline(cin, s[i]); } ll sum = 0; sum += rule_ill_sun(); sum += rule_birds(); sum += rule_house_view(); sum += rule_unique(); sum += rule_animals_I(); sum += rule_freedom(); sum += rule_chupakabra(); sum += rule_peak(); sum += rule_drake(); sum += rule_frequency(); sum += rule_empty(); sum += rule_animals_II(); sum += rule_house_view_down(); sum += rule_grill(); sum += rule_house_grill(); cout << sum; return 0; }