#include<iostream>
#include<cstdio>
#include<cmath>
#include<vector>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<algorithm>
#include<functional>
#include<cstring>
#include<deque>
#include<climits>
using namespace std;
struct edge{
int e,w;
edge(){}
edge(int _e,int _w){
e=_e;w=_w;
}
};
vector<edge>V[1001];
vector<int>Odd;
int path[1001];
int omap[16][16];
int DP[65536];
int log2(int w){
int ans=0;
while(w>(1<<ans))ans++;
return ans;
}
int dfs(int key)
{
if(DP[key]!=1000000)return DP[key];
if(key==0)return 0;
int hi=1,tmp=1;
while(key>=tmp){
if(key&tmp)hi=tmp;
tmp<<=1;
}
int ans=INT_MAX;
for(int low=hi>>1;low;low>>=1)
{
if(key&low){
ans=min(ans,omap[log2(hi)][log2(low)]+dfs(key-hi-low));
}
}
return DP[key]=ans;
}
void makeSP(int s)
{
queue<int> qu;
bool inqu[1001]={false};
memset(path,0x3f,sizeof(path));
path[s]=0;
qu.push(s);
while(!qu.empty())
{
int T=qu.front();qu.pop();
inqu[T]=false;
for(vector<edge>::iterator vit=V[T].begin();vit!=V[T].end();++vit)
{
if(path[vit->e]>path[T]+vit->w)
{
path[vit->e]=path[T]+vit->w;
if(!inqu[vit->e])
{
qu.push(vit->e);
inqu[vit->e]=true;
}
}
}
}
}
int main()
{
int N,M,S,E,s,e,w;
int ans;
int deg[1001];
while(~scanf("%d%d%d%d",&N,&M,&S,&E))
{
ans=0;
memset(deg,0,sizeof(deg));
for(int i=1;i<=N;++i)V[i].clear();
while(M--){
scanf("%d%d%d",&s,&e,&w);
deg[s]++;
deg[e]++;
V[s].push_back(edge(e,w));
V[e].push_back(edge(s,w));
ans+=w;
}
V[S].push_back(edge(E,1E7));deg[S]++;
V[E].push_back(edge(S,1E7));deg[E]++;
Odd.clear();
for(int i=1;i<=N;++i)
if(deg[i]%2==1)
Odd.push_back(i);
memset(omap,0x3f,sizeof(omap));
for(int i=0;i<Odd.size();++i)
{
makeSP(Odd[i]);
for(int j=0;j<Odd.size();++j)
omap[i][j]=path[Odd[j]];
}
for(int i=0;i<65536;++i)DP[i]=1000000;
printf("%d\n",ans+dfs((1<<Odd.size())-1));
}
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPGNzdGRpbz4KI2luY2x1ZGU8Y21hdGg+CiNpbmNsdWRlPHZlY3Rvcj4KI2luY2x1ZGU8c3RhY2s+CiNpbmNsdWRlPHF1ZXVlPgojaW5jbHVkZTxtYXA+CiNpbmNsdWRlPHNldD4KI2luY2x1ZGU8YWxnb3JpdGhtPgojaW5jbHVkZTxmdW5jdGlvbmFsPgojaW5jbHVkZTxjc3RyaW5nPgojaW5jbHVkZTxkZXF1ZT4KI2luY2x1ZGU8Y2xpbWl0cz4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKc3RydWN0IGVkZ2V7CiAgICBpbnQgZSx3OwoJZWRnZSgpe30KCWVkZ2UoaW50IF9lLGludCBfdyl7CgkJZT1fZTt3PV93OwoJfQp9Owp2ZWN0b3I8ZWRnZT5WWzEwMDFdOwp2ZWN0b3I8aW50Pk9kZDsKCmludCBwYXRoWzEwMDFdOwppbnQgb21hcFsxNl1bMTZdOwppbnQgRFBbNjU1MzZdOwppbnQgbG9nMihpbnQgdyl7CiAgICBpbnQgYW5zPTA7CiAgICB3aGlsZSh3PigxPDxhbnMpKWFucysrOwogICAgcmV0dXJuIGFuczsKfQppbnQgZGZzKGludCBrZXkpCnsKICAgIGlmKERQW2tleV0hPTEwMDAwMDApcmV0dXJuIERQW2tleV07CiAgICBpZihrZXk9PTApcmV0dXJuIDA7CiAgICBpbnQgaGk9MSx0bXA9MTsKICAgIHdoaWxlKGtleT49dG1wKXsKICAgICAgICBpZihrZXkmdG1wKWhpPXRtcDsKICAgICAgICB0bXA8PD0xOwogICAgfQogICAgaW50IGFucz1JTlRfTUFYOwogICAgZm9yKGludCBsb3c9aGk+PjE7bG93O2xvdz4+PTEpCiAgICB7CiAgICAgICAgaWYoa2V5Jmxvdyl7CiAgICAgICAgICAgIGFucz1taW4oYW5zLG9tYXBbbG9nMihoaSldW2xvZzIobG93KV0rZGZzKGtleS1oaS1sb3cpKTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gRFBba2V5XT1hbnM7Cn0KCnZvaWQgbWFrZVNQKGludCBzKQp7CiAgICBxdWV1ZTxpbnQ+IHF1OwogICAgYm9vbCBpbnF1WzEwMDFdPXtmYWxzZX07CiAgICBtZW1zZXQocGF0aCwweDNmLHNpemVvZihwYXRoKSk7CiAgICBwYXRoW3NdPTA7CiAgICBxdS5wdXNoKHMpOwogICAgd2hpbGUoIXF1LmVtcHR5KCkpCiAgICB7CiAgICAgICAgaW50IFQ9cXUuZnJvbnQoKTtxdS5wb3AoKTsKICAgICAgICBpbnF1W1RdPWZhbHNlOwogICAgICAgIGZvcih2ZWN0b3I8ZWRnZT46Oml0ZXJhdG9yIHZpdD1WW1RdLmJlZ2luKCk7dml0IT1WW1RdLmVuZCgpOysrdml0KQogICAgICAgIHsKICAgICAgICAgICAgaWYocGF0aFt2aXQtPmVdPnBhdGhbVF0rdml0LT53KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBwYXRoW3ZpdC0+ZV09cGF0aFtUXSt2aXQtPnc7CiAgICAgICAgICAgICAgICBpZighaW5xdVt2aXQtPmVdKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHF1LnB1c2godml0LT5lKTsKICAgICAgICAgICAgICAgICAgICBpbnF1W3ZpdC0+ZV09dHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKaW50IG1haW4oKQp7CiAgICBpbnQgTixNLFMsRSxzLGUsdzsKICAgIGludCBhbnM7CiAgICBpbnQgZGVnWzEwMDFdOwogICAgd2hpbGUofnNjYW5mKCIlZCVkJWQlZCIsJk4sJk0sJlMsJkUpKQogICAgewoJCWFucz0wOwogICAgICAgIG1lbXNldChkZWcsMCxzaXplb2YoZGVnKSk7CiAgICAgICAgZm9yKGludCBpPTE7aTw9TjsrK2kpVltpXS5jbGVhcigpOwogICAgICAgIHdoaWxlKE0tLSl7CiAgICAgICAgICAgIHNjYW5mKCIlZCVkJWQiLCZzLCZlLCZ3KTsKICAgICAgICAgICAgZGVnW3NdKys7CiAgICAgICAgICAgIGRlZ1tlXSsrOwogICAgICAgICAgICBWW3NdLnB1c2hfYmFjayhlZGdlKGUsdykpOwogICAgICAgICAgICBWW2VdLnB1c2hfYmFjayhlZGdlKHMsdykpOwogICAgICAgICAgICBhbnMrPXc7CiAgICAgICAgfQogICAgICAgIFZbU10ucHVzaF9iYWNrKGVkZ2UoRSwxRTcpKTtkZWdbU10rKzsKICAgICAgICBWW0VdLnB1c2hfYmFjayhlZGdlKFMsMUU3KSk7ZGVnW0VdKys7CiAgICAgICAgT2RkLmNsZWFyKCk7CiAgICAgICAgZm9yKGludCBpPTE7aTw9TjsrK2kpCiAgICAgICAgICAgIGlmKGRlZ1tpXSUyPT0xKQogICAgICAgICAgICAgICAgT2RkLnB1c2hfYmFjayhpKTsKICAgICAgICBtZW1zZXQob21hcCwweDNmLHNpemVvZihvbWFwKSk7CiAgICAgICAgZm9yKGludCBpPTA7aTxPZGQuc2l6ZSgpOysraSkKICAgICAgICB7CiAgICAgICAgICAgIG1ha2VTUChPZGRbaV0pOwogICAgICAgICAgICBmb3IoaW50IGo9MDtqPE9kZC5zaXplKCk7KytqKQogICAgICAgICAgICAgICAgb21hcFtpXVtqXT1wYXRoW09kZFtqXV07CiAgICAgICAgfQogICAgICAgIGZvcihpbnQgaT0wO2k8NjU1MzY7KytpKURQW2ldPTEwMDAwMDA7CiAgICAgICAgcHJpbnRmKCIlZFxuIixhbnMrZGZzKCgxPDxPZGQuc2l6ZSgpKS0xKSk7CiAgICB9CiAgICByZXR1cm4gMDsKfQo=