#include <bits/stdc++.h>

using namespace std;

int main(){
    int n;
    cin>>n;
    bool next=true;
    bool binary=true;
    vector<pair<int,char> > h;
    vector<vector<pair<int,char> > > v1 ;
    for(int i=0;i<n;i++){
        v1.push_back(h);
    }
    int cntS=0;
    int sp1,sp2;
    vector<int> v2 (n,'A');
    for(int i=1;i<n;i++){
        int u,v;
        char c;
        cin>>u>>v>>c;
        if(c=='S'){
            cntS++;
            sp1=u;
            sp2=v;
        }
        if(abs(u-v)!=1){
            next=false;
        }
        v1[u].push_back(make_pair(v,c));
        v1[v].push_back(make_pair(u,c));
        v2[min(u,v)]=c;
    }
    if(n<1000){

    }
    else if(binary){

    }
    if(cntS==1){
        int lefti=0;
        int lefto=0;
        int righti=0;
        int righto=0;
        int cnt=0;
        for(int i=0;i<v1[sp1].size();i++){
            if(v1[sp1][i].second=='I'){
                lefti++;
                for(int j=0;j<v1[v1[sp1][i].first].size();j++){
                    if(v1[v1[sp1][i].first][j].second=='O'){
                        cnt++;
                    }
                }
            }
            else if(v1[sp1][i].second=='O'){
                lefto++;
                for(int j=0;j<v1[v1[sp1][i].first].size();j++){
                    if(v1[v1[sp1][i].first][j].second=='I'){
                        cnt++;
                    }
                }
            }
        }
        for(int i=0;i<v1[sp2].size();i++){
            if(v1[sp2][i].second=='I'){
                righti++;
                for(int j=0;j<v1[v1[sp2][i].first].size();j++){
                    if(v1[v1[sp2][i].first][j].second=='O'){
                        cnt++;
                    }
                }
            }
            else if(v1[sp2][i].second=='O'){
                righto++;
                for(int j=0;j<v1[v1[sp2][i].first].size();j++){
                    cout<<v1[v1[sp2][i].first].size();
                    if(v1[v1[sp2][i].first][j].second=='I'){
                        cout<<1;
                        cnt++;
                    }
                }
            }
        }
        cout<<cnt;
        cout<<cnt+lefti*righto+lefto*righti;
    }
    else if(next){
        vector<int> com(27,0);
        vector<int> com1(9,0);
        int cnts=0,cnti=0,cnto=0;
        com[0]++;
        for(int i=1;i<n;i++){
            if(v2[i]=='S'){
                cnts++;
            }
            if(v2[i]=='I'){
                cnti++;
            }
            if(v2[i]=='O'){
                cnto++;
            }
            int idx=(cnts%3)*9+(cnti%3)*3+cnto%3;
            com[idx]++;
        }
        int s=0;
        com1[0]=com[0]+com[13]+com[26];
        com1[1]=com[1]+com[14]+com[24];
        com1[2]=com[2]+com[12]+com[25];
        com1[3]=com[3]+com[16]+com[20];
        com1[4]=com[4]+com[17]+com[18];
        com1[5]=com[5]+com[15]+com[19];
        com1[6]=com[6]+com[10]+com[23];
        com1[7]=com[7]+com[11]+com[21];
        com1[8]=com[8]+com[9]+com[22];
        for(int i=0;i<9;i++){
            s=s+com1[i]*(com1[i]-1)/2;
        }
        cout<<s;
    }
    return 0;
}