#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
// by zrt
// problem:uva10806
// 无论你在什么时候开始,重要的是开始以后就不要停止。
using namespace std ;
typedef long long LL ;
const double eps(1e-10) ;
const int inf(0x3f3f3f3f) ;
int H[105],X[40005],P[40005],from[40005],flow[40005],cost[40005],tot;
inline void add(int x,int y,int z,int k){
P[++tot]=y;X[tot]=H[x];H[x]=tot;flow[tot]=z;from[tot]=x;cost[tot]=k;
}
int f,c;
int n,m;
int S,T;
int d[105],a[105],p[105];
struct N{
int x,w;
friend bool operator < (N a,N b){
return a.w>b.w;
}
N(int a=0,int b=0){
x=a,w=b;
}
};
priority_queue<N> q;
bool spfa(){
memset(d,0x3f,sizeof d);
d[S]=0;a[S]=inf;p[S]=0;int x;
q.push(N(S,0));
while(!q.empty()){
x=q.top().x;q.pop();
if(x==T) continue;
for(int i=H[x];i;i=X[i]){
if(flow[i]>0&&d[P[i]]>d[x]+cost[i]){
d[P[i]]=d[x]+cost[i];
a[P[i]]=min(a[x],flow[i]);
p[P[i]]=i;
q.push(N(P[i],d[P[i]]));
}
}
while(!q.empty()&&d[q.top().x]!=q.top().w) q.pop();
}
if(d[T]==inf) return 0;
f+=a[T];
c+=a[T]*d[T];
x=T;
while(x!=S){
flow[p[x]]-=a[T];
flow[p[x]^1]+=a[T];
x=from[p[x]];
}
return 1;
}
int main(){
#ifdef LOCAL
freopen("in.txt","r",stdin) ;
freopen("out.txt","w",stdout) ;
#endif
while(scanf("%d",&n)&&n){
scanf("%d",&m);
memset(H,0,sizeof H);f=c=0;tot=1;S=0,T=n;
add(S,1,2,0);add(1,S,0,0);
for(int i=0,x,y,z;i<m;i++){
scanf("%d%d%d",&x,&y,&z);
add(x,y,1,z);add(y,x,0,-z);
add(y,x,1,z);add(x,y,0,-z);
}
while(spfa());
if(f==2){
printf("%d\n",c);
}else{
puts("Back to jail");
}
}
return 0 ;
}