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

const int N=100005;
const long long inf=1000000000000000ll;
int n,m,s,t;
long long ans[N];

struct G
{
	int inQ[N],Q[N],st,ed;
	long long dis[N];
	int cnt,h[N],to[N+N],las[N+N],c[N+N];
	void insert(int u,int v,int w)
	{
		las[++cnt]=h[u],h[u]=cnt,to[cnt]=v,c[cnt]=w;
		las[++cnt]=h[v],h[v]=cnt,to[cnt]=u,c[cnt]=w;
	}
	void spfa()
	{
		memset(dis,-1,sizeof(dis));
		int x,i;
		dis[Q[0]]=0,inQ[Q[0]]=1;
		while(st!=ed)
		{
			x=Q[st++],st%=N,inQ[x]=0;
			for(i=h[x];i;i=las[i])
			    if(dis[to[i]]==-1||dis[x]+c[i]<dis[to[i]])
			    {
			    	dis[to[i]]=dis[x]+c[i];
			    	if(!inQ[to[i]])
			    	{
			    		inQ[to[i]]=1;
			    		Q[ed++]=to[i],ed%=N;
			    	}
			    }
		}
	}
}G1,G2;

int main()
{
	scanf("%d%d%d%d",&n,&m,&s,&t);
	int i,u,v,w,x;
	for(i=1;i<=m;i++)
	{
		scanf("%d%d%d%d",&u,&v,&w,&x);
		G1.insert(u,v,w);
		G2.insert(v,u,x);
	}
	G1.st=0,G1.ed=1,G1.Q[0]=s;
	G2.st=0,G2.ed=1,G2.Q[0]=t;
	G1.spfa();
	G2.spfa();
	for(i=1;i<=n;i++)
		ans[i]=G1.dis[i]+G2.dis[i];
	for(i=n-1;i>=1;i--)
	    ans[i]=min(ans[i],ans[i+1]);
	for(i=1;i<=n;i++)
	    printf("%lld\n",inf-ans[i]);
	return 0;
}
