← Home
#include <bits/stdc++.h>
using namespace std;
 
#define int long long
signed main(){
    cin.tie(0);
    ios_base::sync_with_stdio(0);
    //start here
    int N;cin >> N;
 
    vector<int> X;
    vector<int> Y;
    vector<array<int,4>> path;
    {
        int ox = 0,oy = 0;
        for(int i = 0;i < N;i++){
            char c;cin >> c;
            int d;cin >> d;
            int nx = ox,ny = oy;
            if(c == 'R'){
                nx += d;
            }else if(c == 'L'){
                nx -= d;
            }else if(c == 'U'){
                ny += d;
            }else if(c == 'D'){
                ny -= d;
            }
            int xl = min(ox,nx);
            int xr = max(ox,nx)+1;
            int yl =min(oy,ny);
            int yr = max(oy,ny)+1;
            path.push_back({xl,xr,yl,yr});
            X.push_back(xl);
            X.push_back(xr);
            
            Y.push_back(yl);
            Y.push_back(yr);
 
            ox = nx,oy = ny;
        }
    }
    sort(X.begin(),X.end());
    sort(Y.begin(),Y.end());
    X.resize(unique(X.begin(),X.end())-X.begin());
    Y.resize(unique(Y.begin(),Y.end())-Y.begin());
    
 
    vector<vector<int>> grid(X.size()+2,vector<int>(Y.size()+2,-1));// -1 unvisit, 0 visit, 1 : wall
    {
        int ox = 0,oy = 0;
        for(auto [xl,xr,yl,yr]:path){        
            int rxl = lower_bound(X.begin(),X.end(),xl)-X.begin()+1;
            int rxr = lower_bound(X.begin(),X.end(),xr)-X.begin();
            int ryl = lower_bound(Y.begin(),Y.end(),yl)-Y.begin()+1;
            int ryr = lower_bound(Y.begin(),Y.end(),yr)-Y.begin();
 
            for(int i = rxl;i <= rxr;i++){
                for(int j = ryl;j <= ryr;j++){
                    grid[i][j] = 1;
                }
            }
        }
    }
    {// bfs;
        
        queue<pair<int,int>> q;
        for(int i = 0;i <= X.size()+1;i++){
            q.push({i,0});
            q.push({i,Y.size()+1});
            grid[i][0] = 0;
            grid[i][Y.size()+1] = 0;
        }
        for(int i = 0;i <= Y.size()+1;i++){
            q.push({0,i});
            q.push({X.size()+1,i});
            grid[0][i] = 0;
            grid[X.size()+1][i] = 0;
        }
 
        int dx[4] = {0,1,0,-1};
        int dy[4] = {1,0,-1,0};
        while(!q.empty()){
            auto [cx,cy] = q.front();
            q.pop();
            for(int d = 0;d < 4;d++){
                int nx = cx+dx[d];
                int ny = cy+dy[d];
                if(nx < 0 || ny < 0 || nx > X.size()+1 || ny > Y.size()+1) continue;
                if(grid[nx][ny] == 1 || grid[nx][ny] == 0) continue;
                q.push({nx,ny});
                grid[nx][ny] = 0;
            }
        }
    }
 
    int ans = 0;
    for(int i = 1;i <= X.size();i++){
        for(int j = 1;j <= Y.size();j++){
            if(grid[i][j] == 0) continue;
            int w = X[i]-X[i-1];
            int h = Y[j]-Y[j-1];
            // cout << "!" << i << " " << j << "->" << w << " " << h << endl;
            ans += w*h;
            
        }
    }
    cout << ans;
}