#include<iostream>
int m,n;//n个城市 m条道路
struct node{
int a,b,c,p,r;
};
int visit[11]={0};
int min=100000;
node point[11];
void dfs(int k,int cost)
{
if(cost>=min)
{
return;
}
if(point[k].b==n)
{
if(min>cost)
{
min=cost;
}
return;
}
for(int i=0;i<m;i++)
{
if(point[k].b==point[i].a&&visit[point[i].b]<=3)
{
visit[point[i].b]++;
if(visit[point[i].c]>=1)
{ cost=cost+point[i].p;}
else{
cost=cost+point[i].r;
}
dfs(i,cost);
visit[point[i].b]--;
if(visit[point[i].c]>=1)
{ cost=cost-point[i].p;}
else{
cost=cost-point[i].r;
}
}
}
}
int main()
{
freopen("input.txt","r",stdin);
scanf("%d",&n);
scanf("%d",&m);
for(int i=1;i<=n;i++)
visit[i]=0;
min=100000;
for(int i=0;i<m;i++)
{
scanf("%d%d%d%d%d",&point[i].a,&point[i].b,&point[i].c,&point[i].p,&point[i].r);
}
for(int i=0;i<m;i++)
{
if(point[i].a==1)
{
visit[point[i].a]++;
visit[point[i].b]++;
if(visit[point[i].c]>0){
dfs(i,point[i].p);}
else{
dfs(i,point[i].r);
}
for(int i=1;i<=n;i++)
visit[i]=0;
}
}
if(min==100000)
{
printf("impossible\n");
}else{
printf("%d\n",min);
}
return 0;
}