//并查集应用
var p=new Array(10001) //聚会人数池
//查找根元素
function findRoot(x){
return x==p[x]?x:p[x]=findRoot(p[x])
}
var newFriend=0
var n=parseInt(readline())
var t=parseInt(readline())
var m=parseInt(readline())
//根据聚会总人数缩小线程池,并将每个元素自身的父元素(根元素)设为自身
for (let i = 0; i < n; i++) {
p[i]=i
}
//闭合并查集
for (let i = 0; i < m; i++) {
//读取每组数据,并拆分
var a,b
var then=readline().split(',')
a=then[0]
b=then[1]
//获取对应根元素
var pa=findRoot(a)
var pb=findRoot(b)
//如果拆分的元素任意一个与标记元素相同,那就代表我一开始就认识你!
if (a==t||b==t) {
newFriend-=1
}
if (pa!=pb) {
//如果拆分元素的两祖先相同则不作合并,否则合并,并以深度大的当作深度小的父元素
//pa的父元素设为pb
p[pa]=pb
}
}
for (let i = 0; i < n; i++) {
//每个元素都能找到根元素了,那就看看标记元素的根元素和它一不一样,每出现一个一样就代表新认识
if (findRoot(i)==findRoot(t)) {
newFriend+=1
}
}
//最后不得把自己减出去吗?
//所以
console.log(newFriend-1)