Example

Input

3 3 1 2 4
1 2
2 3
3 1


Output

IMPOSSIBLE
#include <bits/stdc++.h>
using namespace std;

#define REP(i,n) for(int i=0;i<(int)(n);i++)
#define FOR(i,a,b) for(int i=(int)(a);i<(int)(b);i++)
#define FORR(i,a,b) for(int i=(int)(b)-1;i>=(int)(a);i--)
#define CHMIN(a,b) (a) = min((a),(b))
#define CHMAX(a,b) (a) = max((a),(b))

typedef long long ll;

int n,m,a,b,c;
bool g[52][52];
bool g2[52][52][125];

const int INF = 83025;

int dist[52];

int main(){
  scanf("%d%d%d%d%d",&n,&m,&a,&b,&c);
  REP(i,m){
    int u,v;
    scanf("%d%d",&u,&v);
    u--;v--;
    g[u][v] = true;
  }
  REP(i,n)REP(j,n)g2[i][j][1] = g[i][j];
  FOR(s,2,125){
    REP(i,n)REP(j,n)if(g2[i][j][s-1]){
      REP(k,n)if(g[j][k]){
        g2[i][k][s] = true;
      }
    }
  }
  // REP(i,n){
  //   REP(j,n)printf("%d",g2[i][j][a]);puts("");
  // }
  // REP(i,n){
  //   REP(j,n)printf("%d",g2[i][j][b]);puts("");
  // }
  // REP(i,n){
  //   REP(j,n)printf("%d",g2[i][j][c]);puts("");
  // }
  REP(i,n)dist[i] = INF;
  dist[n-1] = 0;
  REP(t,100){
    set<int> nxt;
    REP(i,n)if(g2[i][n-1][a]&&g2[i][n-1][b]&&g2[i][n-1][c]){
      nxt.insert(i);
    }
    for(int x:nxt){
      CHMIN(dist[x], t+1);
      REP(i,n){
        if(g2[i][x][a])g2[i][n-1][a]=true;
        if(g2[i][x][b])g2[i][n-1][b]=true;
        if(g2[i][x][c])g2[i][n-1][c]=true;
      }
    }
  }
  int ans = dist[0];
  if(ans==INF){
    puts("IMPOSSIBLE");
  }else{
    printf("%d\n",ans);
  }
  return 0;
}