using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Zadatak1
{
    class Program
    {

        static bool SveTrue(bool[] niz)
        {
            for (int i = 0; i < 5; i++)
                if (!niz[i]) return false;
            return true;
        }
        static bool DaLiVecIma(List<List<int>> listatacnih, List<int> listaputa)
        {
            List<int> listaPoredjenje = new List<int>();
            for (int i = 0; i < listatacnih.Count; i++)
            {
                listaPoredjenje = listatacnih[i].Except(listaputa).ToList();
                if (listaPoredjenje.Count == 0)
                    return true;
            }
            return false;
        }
        static bool DaLiJeSIO(List <int> listaputa, string[,] matricapovezanosti, List<List<int>> listatacnih)
        {
            bool tac = false;
            if (listaputa.Count == 1 || listaputa.Count == 2 || listaputa.Count == 3)
                return false;
            List<string> lista = new List<string>();
            for (int i = 0; i < listaputa.Count - 1; i++)
            {
                lista.Add(matricapovezanosti[listaputa[i], listaputa[i + 1]]);
            }
            int s = 0, ii = 0, o = 0;
            for (int i = 0; i < lista.Count; i++)
            {
                if (lista[i] == "S")
                {
                    s++;
                }
                else if (lista[i] == "I")
                {
                    ii++;
                }
                else if (lista[i] == "O")
                {
                    o++;
                }
            }
            if (s == ii && o == s)
                tac = true;
            if (tac)
                if (!DaLiVecIma(listatacnih, listaputa)) 
                    return true;
            return false;
        }
        static List<int> Komsije(string[,] matricaPovezanosti,int cvor, bool [] prodjeni)
        {
            List<int> lista = new List<int>();
            for (int i = 0; i < prodjeni.Length; i++)
            {
                if (matricaPovezanosti[cvor, i] != null && !prodjeni[i])
                    lista.Add(i);
            }
            return lista;
        }
        static int DubinaTrazenje(string[,] matricapovezanosti, int startna, bool[] nizprolazenja, List<int> lista, List<int> listaputa, List<List<int>> listatacnih, int brojac)
        {
            while (!SveTrue(nizprolazenja))
            {
                nizprolazenja[startna] = true;
                if (!listaputa.Contains(startna))
                    listaputa.Add(startna);
                if ((listaputa.Count - 1) % 3 == 0)
                {
                    if (DaLiJeSIO(listaputa, matricapovezanosti, listatacnih))
                    {
                        /* 
                        listatacnih[brojac] = new List<int>();
                        for (int i = 0; i < listaputa.Count; i++)
                        {
                            listatacnih[brojac].Add(listaputa[i]);
                        }
                        */
                        brojac++;
                    }
                 }
                 lista = Komsije(matricapovezanosti, startna, nizprolazenja);
                 if (lista.Count == 0)
                 {
                     listaputa.RemoveAt(listaputa.Count - 1);
                     startna = listaputa[listaputa.Count - 1];
                 }
                 else
                 {
                     startna = lista[0];
                 }
             }
             return brojac;
         }
         static void Main(string[] args)
         {
             int n = int.Parse(Console.ReadLine());
             string[,] matricaPovezanosti = new string[n, n];
             string[] s;
             int a, b;
             bool[] nizprolazenja = new bool[n];
             string sio;
             for (int i = 0; i < n - 1; i++)
             {
                 s = Console.ReadLine().Split();
                 a = int.Parse(s[0]) - 1;
                 b = int.Parse(s[1]) - 1;
                 sio = s[2];
                 matricaPovezanosti[a, b] = sio;
                 matricaPovezanosti[b, a] = sio;
             }
             List<List<int>> listaTacnih = new List<List<int>>();
             List<int> listaKomsija = new List<int>();
             List<int> listaputa = new List<int>();
             bool[] prodjeni = new bool[n];
             Console.WriteLine(DubinaTrazenje(matricaPovezanosti, 5, nizprolazenja, listaKomsija, listaputa, listaTacnih, 0));
        }
    }
}