#include<stdio.h>
typedef int ElementType;
typedef struct{
ElementType data[100];
int size;
}List;
void make_null(List *L ){
L->size=0;
}
void push_list(List *L, ElementType x){
L->data[L->size]=x;
L->size++;
}
#define N 500
typedef struct{
int n;
int A[N][N];
}Graph;
// Khoi tao do thi vo huong khong khuyen
void init_graph(Graph *G, int n){
G->n=n;
int i,j;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
G->A[i][j]=0;
}
void add_graph(Graph *G, int x, int y){
G->A[x][y]=1;
// G->A[y][x]=1;
}
int adjacent(Graph *G, int x, int y){
return (G->A[x][y]!=0 || G->A[y][x]!=0);
}
int degree(Graph *G, int x){
int deg = 0,i;
for(i=1;i<=G->n;i++)
if(G->A[x][i]!=0)
deg++;
return deg;
}
List neighbors(Graph *G, int x){
List L;
make_null(&L);
int i;
for(i=1;i<=G->n;i++)
if(adjacent(G,x,i))
push_list(&L,i);
return L;
}
int main(){
Graph G;
int i,j,n,u,v,m;
freopen("dt.txt","r",stdin);
scanf("%d%d",&n,&m);
init_graph(&G,n);
for(i=1;i<=m;i++){
scanf("%d%d",&u,&v);
add_graph(&G,u,v);
}
// int a[100][100];
// for(i=1;i<=G.n;i++){
// for(j=1;j<=G.n;j++)
// scanf("%d",&a[i][j]);
// }
// for(i=1;i<=G.n;i++){
// for(j=1;j<=G.n;j++)
// if(a[i][j]==1){
// add_graph(&G,i,j);
// }
// }
// printf("IN MA TRAN\n");
// for(i=1;i<=n;i++){
// for(j=1;j<=n;j++)
// printf("%d ",G.A[i][j]);
// printf("\n");
// }
List L1,L2;
int x,y;
int dem=0;
scanf("%d%d",&x,&y);
L1=neighbors(&G,x);
L2=neighbors(&G,y);
for(i=0;i<L1.size;i++){
for(j=0;j<L2.size;j++)
if(L1.data[i]==L2.data[j])
dem++;
}
printf("%d",dem);
return 0;
}