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

namespace zad3k1
{
    internal class Program
    {
        class cvor
        {
            public List<int> iznad = new List<int>();
            int rbr;
            public List<bool>put=new List<bool>();
            public cvor(int n)
            {
                rbr = n;
            }
            public void spoj(int n)
            {
                iznad.Add(n);
            }
            public void led(bool b)
            {
                put.Add(b);
            }
        }
        class sve
        {
            List<cvor>cvorovi=new List<cvor>();
            public void dc(cvor c)
            {
                cvorovi.Add(c);
            }
            public void pp(List<int> l, List<int> d, List<bool> led, List<int> pom, int p, bool f)
            {
                while (pom.Count != 0 || f)
                {
                    List<int> pom1 = pom;
                    pom.Clear();
                    foreach (int vr in pom1)
                    {
                        for (int i = 0; i < l.Count && f; i++)
                        {
                            if (l[i] == vr)
                            {
                                cvorovi[p].spoj(d[i]);
                                cvorovi[p].led(led[i]);
                                pom.Add(d[i]);
                                l.RemoveAt(i);
                                d.RemoveAt(i);
                                led.RemoveAt(i);
                                i--;
                            }
                            if (d[i] == vr)
                            {
                                cvorovi[p].spoj(l[i]);
                                cvorovi[p].led(led[i]);
                                pom.Add(l[i]);
                                l.RemoveAt(i);
                                d.RemoveAt(i);
                                led.RemoveAt(i);
                                i--;
                            }
                        }
                    }
                    for (int i = 0; i < l.Count && f; i++)
                    {
                        if (l[i] == p)
                        {
                            cvorovi[p].spoj(d[i]);
                            cvorovi[p].led(led[i]);
                            pom.Add(d[i]);
                            l.RemoveAt(i);
                            d.RemoveAt(i);
                            led.RemoveAt(i);
                            i--;
                        }
                        if (d[i] == p)
                        {
                            cvorovi[p].spoj(l[i]);
                            cvorovi[p].led(led[i]);
                            pom.Add(l[i]);
                            l.RemoveAt(i);
                            d.RemoveAt(i);
                            led.RemoveAt(i);
                            i--;
                        }
                    }
                    f = false;
                }
            }
            public int pretraga(int p,int k,int ps,bool stanje)
            {
                if (cvorovi[p].iznad.Contains(k) == false)
                {
                    int a = cvorovi[p].iznad.Count;
                    for(int i = 0;i < a;i++)
                    {
                        if (cvorovi[p].put[i] == stanje)
                        {
                            return pretraga(cvorovi[p].iznad[i], k, ps, stanje);
                        }                       
                        return pretraga(cvorovi[p].iznad[i], k, ps + 1, cvorovi[p].put[i]);
                    }
                }
                int m = cvorovi[p].iznad.IndexOf(k);
                if (m!=-1 && cvorovi[p].put[m] == stanje)
                {
                    return ps;
                }
                return ps + 1;
            }
        }
        static void Main(string[] args)
        {
            sve a = new sve();
            cvor c;
            string[] nz = Console.ReadLine().Split();
            int n = int.Parse(nz[0]), m = int.Parse(nz[1]);
            List<int> veze1 = new List<int>();
            List<int> veze2 = new List<int>();
            List<int> pom = new List<int>();
            List<bool> dn = new List<bool>();
            c = new cvor(0);
            a.dc(c);
            for(int i=0;i<m;i++)
            {
                c = new cvor(i + 1);
                a.dc(c);
                nz = Console.ReadLine().Split();
                veze1.Add(int.Parse(nz[0]));
                veze2.Add(int.Parse(nz[1]));
                if (int.Parse(nz[2]) == 0)
                    dn.Add(false);
                else
                    dn.Add(true);
                
            }
            nz = Console.ReadLine().Split();
            int p = int.Parse(nz[0]), k = int.Parse(nz[1]);
            a.pp(veze2, veze1, dn, pom, p, true);
            Console.WriteLine(a.pretraga(p, k, 0, false));
            Console.ReadLine();
        }
    }
}