Example

Input

3 3 1 2 4
1 2
2 3
3 1


Output

IMPOSSIBLE
#include<bits/stdc++.h>
#define r(i,n) for(int i=0;i<n;i++)
using namespace std;
int A[55][55];
vector<vector<int> >s[55];
int n,m,a[3],x,y,d[55];
int dp[111][55][55];
int main(){
  cin>>n>>m;
  r(i,3)cin>>a[i];
  r(i,m){
    cin>>x>>y;
    x--;y--;
    A[x][y]=1;
    dp[1][x][y]=1;
  }
  r(i,55)s[i].resize(n);
  for(int i=1;i<101;i++){
    r(j,n){
      r(k,n)if(dp[i][j][k]){
        r(l,n){
          if(A[k][l]){
            dp[i+1][j][l]=1;
          }
        }
      }
    }
  }
  r(i,3){
    r(j,n){
      r(k,n){
        if(dp[a[i]][j][k]){
          s[j][i].push_back(k);
        }
      }
    }
  }
  r(i,n)d[i]=1e8;
  d[n-1]=0;
  while(1){
    r(i,n){
      int X=0;
      r(j,3){
        int c=1e8;
        r(k,s[i][j].size()){
          x=s[i][j][k];
          c=min(c,d[x]);
        }
        X=max(X,c);
      }
      X++;
      if(d[i]>X){
        d[i]=X;
        goto L;
      }
    }
    break;
    L:;
  }
  if(d[0]==1e8) cout<<"IMPOSSIBLE"<<endl;
  else cout<<d[0]<<endl;
}
