import java.util.*;
//并查集
class UF {
    //父节点数组
    int[] parent;
    //初始连通分量个数
    int count;
    public UF(int n) {
        parent = new int[n];
        count = n;
        //把父节点设置为自己
        for (int i = 0; i < n; i++) {
            parent[i] = i;
        }
    }

    //递归找到父节点
    public int find(int x) {
        if (parent[x] != x) {
            parent[x] = find(parent[x]);
        }
        return parent[x];

    }
    //p为想要连接的父节点 q为源节点
    public void union(int p, int q) {
        int rootP = find(p);
        int rootQ = find(q);
        if (rootP == rootQ) return;
        parent[rootQ] = rootP;
        count--;
    }

    //判断两个节点是否构成连通分量
    public boolean isconnect(int p, int q) {
        return find(p) == find(q);

    }
}
public class Main {
    static List<List<Integer>> graph;
    static UF uf;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        graph = new ArrayList<>();
        int n = sc.nextInt();  // 顶点数量
        int A = sc.nextInt();  
        int m = sc.nextInt();  // 边的数量

        for (int i = 1; i <= n; i++) {
            graph.add(new ArrayList<>());  // 为每个顶点初始化邻接列表
        }
        for (int i = 0; i < m; i++) {
            String[] strs = sc.next().split(",");
            int u = Integer.parseInt(strs[0]);
            int v = Integer.parseInt(strs[1]);
            graph.get(u).add(v);
            graph.get(v).add(u);
        }


        //计算原来就认识的
        int count = 0;
        //A的直接邻居
        List<Integer> temp = graph.get(A);
        count += temp.size();

        int res = 0;
        //并查集找到所有认识的
        uf = new UF(n);
        dfs(A,n);
        for (int i = 0; i < n; i++) {
            if (i == A) continue;
            //二者相连就是认识
            if (uf.isconnect(A, i)) {
                res++;
            }
        }
        System.out.println(res-count);
    }
    //递归找父节点与A相连通的
    private static void dfs(int A,int n) {
        //A的直接邻居或者间接邻居
        for (int node : graph.get(A)) {
            if (uf.isconnect(A, node)) continue;
            //把node作为A的父节点
            uf.union(node, A);
            //顺着链找到最父节点进行递归
            int root = uf.find(A);
            dfs(root,n);
        }
    }
}