Example

Input

3 3 1 2 4
1 2
2 3
3 1


Output

IMPOSSIBLE
#include<bits/stdc++.h>
#define ms(x,y) memset(x,y,sizeof(x))
#define ll long long
using namespace std;
const int N=55;
const double inf =1e18;

vector<int> e[N];
int n,m,a,b,c;
bool rea[N];
int vis[105][N];
bool q[2][N];
int cnt[2];

bool bfs() {
//	printf("BFS!");
	bool flag=false;
	cnt[0]=0;
	ms(vis,0);
	ms(q,0);
	for(int i=1;i<=n;i++)
		if(rea[i])q[0][i]=true;
	for(int i=1;i<=c;i++)
	{
		int ju=i&1;
		ms(q[ju],0);
		for(int j=1;j<=n;j++)
			if(q[ju^1][j])
				for(vector<int>::iterator it=e[j].begin();it!=e[j].end();it++){
					q[ju][*it]=true;
					if(i==a || i==b || i==c)
						vis[i][*it]=true;
			}
	}
//	for(int i=1;i<=n;i++)
//		printf("i=%d %d%d%d ",i,vis[a][i],vis[b][i],vis[c][i]);
//	printf("\n");
	for(int i=1;i<=n;i++)
		if(vis[a][i] && vis[b][i] && vis[c][i]){
			if(i==1){
				rea[i]=true;
				return false;
			}
			if(!rea[i]){
				rea[i]=true;
				flag=true;
			}
		}
	return flag; 
}
int main(){
	int ta[3];
	scanf("%d%d%d%d%d",&n,&m,&ta[0],&ta[1],&ta[2]);
	sort(ta,ta+3);
	a=ta[0];b=ta[1];c=ta[2];
	int u,v;
	for(int i=1;i<=m;i++) {
		scanf("%d%d",&u,&v);
		e[v].push_back(u);
	}
	ms(rea,0);
	rea[n]=true;
	int ans=0;
	while(bfs()) ans++;
	if(rea[1])printf("%d\n",ans+1);
	else printf("IMPOSSIBLE\n");
	return 0;
}