program sukabinti_ziedai;
  { 138 u‘davinys }
  const MAX_N = 300;  { maksimalus ‘ied— skai‡ius }
        MAX_K = 1000; { maksimalus sukabinim— skai‡ius }
  type  grafas = array [1..MAX_K] of record
                                       v1, v2: integer
                                     end;
        virsunes = array [1..MAX_N] of  record
                                          sp: (balta, pilka);
                                          d: integer { trumpiausias atstumas }
                                        end;         { iki a }

        eile = array [1..MAX_N] of integer;
               {  eilŠ traukiami tik virž–ni— numeriai }

  procedure itraukti_i_eile (x: integer;
                             var e: eile; var uodega: integer);
  { traukia  eil‚s e gal… virž–nŠ x }
  begin
    e[uodega] := x;
    if uodega = MAX_N
       then uodega := 1
       else uodega := uodega + 1
  end; { traukti__eilŠ }

  procedure pasalinti_is_eiles (var galva: integer);
  { pažalina iž eil‚s e pirm…j… virž–nŠ }
  begin
    if galva = MAX_N
       then galva := 1
       else galva := galva + 1
  end; { pažalinti_iž_eil‚s }

  function ziedai (a, b, k, n: integer; g: grafas): integer;
    var galva, uodega, { eil‚s atributai }
        u, v, i: integer;
        atr: virsunes; { vis— virž–ni— atributai }
        e: eile;       { virž–ni— eil‚ }
  begin
    { inicializuojame virž–nes }
    for i := 1 to n do
      begin
        atr[i].sp := balta;
        atr[i].d := maxint;
      end;
    atr[a].sp := pilka;  { ‘inome trumpiausi… atstum… iki a }
    atr[a].d := 0;
    galva := 1;
    uodega := 1;
    itraukti_i_eile (a, e, uodega);
    while galva <> uodega do   { kol eil‚ netuž‡ia }
      begin
        u := e[galva];
        for i := 1 to k do
          if (g[i].v1 = u) and (atr[g[i].v2].sp = balta) or
             (g[i].v2 = u) and (atr[g[i].v1].sp = balta)
             { randame dar nenagrin‚t… virž–nŠ, gretim… virž–nei u }
             then begin
                    if g[i].v1 = u { imame reikiam… virž–nŠ iž poros }
                       then v := g[i].v2
                       else v := g[i].v1;
                    atr[v].sp := pilka;
                    atr[v].d := atr[u].d + 1;
                    itraukti_i_eile (v, e, uodega)
                  end;
        pasalinti_is_eiles (galva);
      end;
    { rasime pažalinam— ‘ied— skai‡i— }
    ziedai := n - (atr[b].d + 1)
  end; { ‘iedai }

  var f: text;
      n, a, b, k, i: integer;
      g: grafas;
begin
  { duomen— vedimas }
  assign (f, 'ZIEDAI.DAT');
  reset (f);
  readln (f, n, a, b, k);
  for i := 1 to k do
    readln (f, g[i].v1, g[i].v2);
  close (f);
  writeln (ziedai(a, b, k, n, g))
end.

