#include<bits/stdc++.h>

using namespace std;

int n;

vector<string> str;

bool b[50][50];

void reset(){
    for(int i=0;i<50;i++){
        for(int j=0;j<50;j++){
            b[i][j] = 0;
        }
    }
}

bool valid(int x, int y){
    return x>=0 && y>=0 && x<n && y<n;
}

int suns(){
    reset();
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            if(str[i][j] == '*'){
                int diffX[8] = {0,1,1, 1, 0,-1,-1,-1};
                int diffY[8] = {1,1,0,-1,-1,-1, 0, 1};
                for(int k=0;k<8;k++){
                    int x = i, y=j;
                    while(valid(x,y)){
                        if(str[x][y] != ' ' && str[x][y] != '*'){
                            b[x][y] = 1;
                            break;
                        }
                        x+=diffX[k];
                        y+=diffY[k];
                    }
                }
            }
        }
    }
    int db = 0;
    for (size_t i = 0; i < n; i++)
    {
        for (size_t j = 0; j < n; j++)
        {
            db+=b[i][j];
        }
    }
    return db*100;
}

int bird(){
    int mini = n, maxi = 0;
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            if(str[i][j] == 'D' || str[i][j] == 'v'){
                mini = min(mini, j);
                maxi = max(maxi, j);
            }
        }
    }
    return max((maxi-mini+1)*500,0);
}
int perim(){
    int db = 0;
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            if(str[i][j] == 'D' || str[i][j] == 'v'){
                int diffX[4] = {0,1,0,-1};
                int diffY[4] = {1,0,-1, 0};
                for(int k=0;k<4;k++){
                    int x = diffX[k]+i;
                    int y = diffY[k]+j;
                    if(!valid(x,y) || (str[x][y] != 'D' && str[x][y] != 'v')){
                        ++db;
                    }
                }
            }
        }
    }
    return db*60;
}

int view(){
    int db = 0;
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            if(str[i][j] == '^'){
                for(int k=i-1;k>0;k--){
                    if(str[k][j] == ' '){
                        ++db;
                    } else {
                        break;
                    }
                }
            }
        }
    }
    int db2 = 0;
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            if(str[i][j] == '^'){
                for(int k=i-1;k>0;k--){
                    if(str[k][j] == ' '){
                        ++db2;
                        break;
                    } else {
                        break;
                    }
                }
            }
        }
    }
    return db*15;
}

int blocks(){
    int db=0;
    for(int i=0;i<n-2;i++){
        for(int j=0;j<n-2;j++){
            bool ok = 1;
            for(int k=0;k<=i;k++){
                for(int l=0;l<=j;l++){
                    if((i!=k || j!= l) &&
                    str[i][j] == str[k][l] && str[i+1][j] == str[k+1][l] && str[i+2][j] == str[k+2][l] && 
                    str[i][j+1] == str[k][l+1] && str[i+1][j+1] == str[k+1][l+1] && str[i+2][j+1] == str[k+2][l+1] && 
                    str[i][j+2] == str[k][l+2] && str[i+1][j+2] == str[k+1][l+2] && str[i+2][j+2] == str[k+2][l+2]){
                        ok=0;
                    }
                }
            }
            db+=ok;
        }
    }
    return db;
}

int anim1(){
    int db = 0;
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            if(str[i][j] == 'D' || str[i][j] == 'v' || str[i][j] == '!'){
                int diffX[4] = {0,1,0,-1};
                int diffY[4] = {1,0,-1, 0};
                for(int k=0;k<4;k++){
                    int x = diffX[k]+i;
                    int y = diffY[k]+j;
                    if(valid(x,y) && str[x][y] == ' '){
                        ++db;
                    }
                }
            }
        }
    }
    return db*15;
}
int freedom(){
    reset();
    for(int i=0;i<n;i++){
        b[i][0] = 1;
        b[i][n-1] = 1;
        b[0][i] = 1;
        b[n-1][i] = 1;
    }
    for(int z=0;z<n*n;z++){
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                if(str[i][j] == ' ' && b[i][j]){
                    int diffX[4] = {0,1,0,-1};
                    int diffY[4] = {1,0,-1, 0};
                    for(int k=0;k<4;k++){
                        int x = diffX[k]+i;
                        int y = diffY[k]+j;
                        if(valid(x,y)){
                            b[x][y]=1;
                        }
                    }
                }
            }
        }
    }
    int db = 0;
    for (size_t i = 0; i < n; i++)
    {
        for (size_t j = 0; j < n; j++)
        {
            if(str[i][j] != ' ' && b[i][j]){
                ++db;
            }
        }
    }
    return db*7;
}


int kapibara(){
    reset();
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            if(str[i][j] == '!'){
                int diffX[8] = {1,2, 1, 2,-1,-2,-1,-2};
                int diffY[8] = {2,1,-2,-1,-2,-1, 2, 1};
                for(int k=0;k<8;k++){
                    int x = diffX[k]+i;
                    int y = diffY[k]+j;
                    if(valid(x,y) && (str[x][y] == 'D' || str[x][y] == 'v')){
                        b[x][y] = 1;
                    }
                }
            }
        }
    }
    int db = 0;
    for (size_t i = 0; i < n; i++)
    {
        for (size_t j = 0; j < n; j++)
        {
            if(b[i][j]){
                ++db;
            }
        }
    }
    return db*200;
}

int peaks(){
    vector<pair<int,int>> v;
    for(int i=0;i<n;i++){
        for(int j=0;j<n-1;j++){
            if(str[i][j] == '/' && str[i][j+1] == '\\'){
                v.push_back({i,j});
            }
        }
    }
    int db = 0;
    for(int i=0;i<v.size();i++){
        int maxi = 0;
        for(int j=0;j<v.size();j++){
            maxi = max(abs(v[i].first-v[j].first)+abs(v[i].second-v[j].second), maxi);
        }
        db+=maxi;
    }
    return db*50;
}

int drake(){
    int db = 0;
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            if(str[i][j] == 'D'){
                int diffX[4] = {0,1,0,-1};
                int diffY[4] = {1,0,-1, 0};
                for(int k=0;k<4;k++){
                    int x = diffX[k]+i;
                    int y = diffY[k]+j;
                    if(valid(x,y) && str[x][y] == 'G'){
                        ++db;
                        break;
                    }
                }
            }
        }
    }
    return db*500;
}

int minFreq(){
    int empty = 0;
    map<char, int> m;
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            if(str[i][j] != ' '){
                ++m[str[i][j]];
            } else {
                ++empty;
            }
        }
    }
    int mini = INT_MAX;
    int db=0;
    for(auto& a : m){
        if(mini > a.second){
            mini = a.second;
            db=0;
        }
        if(mini == a.second){
            db+=a.second;
        }
    }
    return db*10+empty;
}

int anim2(){
    int kapi = 0, bird = 0, drake = 0, house = 0, grill = 0;
    for (size_t i = 0; i < n; i++)
    {
        for (size_t j = 0; j < n; j++)
        {
            switch(str[i][j]){
            case 'D':
                ++drake;
                break;
            case 'v':
                ++bird;
                break;
            case '!':
                ++kapi;
                break;
            case 'G':
                ++grill;
                break;
            case '^':
                ++house;
                break;
            }
        }
        
    }
    return drake*bird*kapi+min(house,grill)*3;
}


int grilldrake(){
    int db = 0;
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            if(str[i][j] == 'G'){
                int diffX[4] = {0,1,0,-1};
                int diffY[4] = {1,0,-1, 0};
                for(int k=0;k<4;k++){
                    int x = diffX[k]+i;
                    int y = diffY[k]+j;
                    if(valid(x,y) && str[x][y] == 'D'){
                        ++db;
                        break;
                    }
                }
            }
        }
    }
    return db*50;
}

bool charok(char chr){
    switch(chr){
    case ' ': return 1;
    case '*': return 1;
    case '^': return 1;
    case '!': return 1;
    case '/': return 1;
    case '\\': return 1;
    case 'v': return 1;
    case 'D': return 1;
    case 'G': return 1;
    }
    return 0;
}

int main(){
    cin >> n;

    str.resize(n);
    getline(cin, str[0]);
    for (size_t i = 0; i < n; i++)
    {
        getline(cin, str[i]);
    }
    //cout << suns() << " " << bird() << " " << perim() << " " << view() << " " << blocks() << " " << anim1() << " " << freedom() << " " << kapibara() << " " << peaks() << " " << drake() << " " << minFreq() << " " << anim2() << " " << grilldrake() << '\n';
    cout << suns() + bird() + perim() + view() + blocks() + anim1() + freedom() + kapibara() + peaks() + drake() + minFreq() + anim2() + grilldrake() << '\n';
    
return 0;
}