///////////////////////////////////////////// Template /////////////////////////////////////////////
#![allow(non_snake_case, unused)]
use std::io::Write;
use std::collections::*;

macro_rules! debug {
	($($v: expr),*) => {
		$(let _ = write!(::std::io::stderr(), "{} = {:?} ", stringify!($v), $v);)*
		let _ = writeln!(::std::io::stderr(), "@ {}:{}", file!(), line!());
	}
}
macro_rules! mat {
	($e:expr) => { $e };
	($e:expr; $d:expr $(; $ds:expr)*) => { vec![mat![$e $(; $ds)*]; $d] };
}
macro_rules! ok {
	($a:ident$([$i:expr])*.$f:ident()$(@$t:ident)*) => {
		$a$([$i])*.$f($($t),*)
	};
	($a:ident$([$i:expr])*.$f:ident($e:expr$(,$es:expr)*)$(@$t:ident)*) => { {
		let t = $e;
		ok!($a$([$i])*.$f($($es),*)$(@$t)*@t)
	} };
}
mod template {
	type I<'a> = ::std::iter::Peekable<::std::str::SplitWhitespace<'a>>;
	pub trait FromLn<'a> {
		fn fromln(&mut I<'a>) -> Self;
	}
	pub fn readln<T: for<'a> FromLn<'a>>() -> T {
		let mut buf = String::new();
		let _ = ::std::io::stdin().read_line(&mut buf).unwrap_or_else(|e| panic!("{}", e));
		let mut it = buf.split_whitespace().peekable();
		let t = T::fromln(&mut it);
		if it.peek().is_some() { panic!("input mismatch") }
		t
	}
	pub fn readlns<T: for<'a> FromLn<'a>>(n: usize) -> Vec<T> {
		(0..n).map(|_| readln()).collect()
	}
	macro_rules! read_primitives {
		($($t:ty),*) => { $(
			impl<'a> FromLn<'a> for $t {
				fn fromln(it: &mut I<'a>) -> $t {
					it.next().unwrap_or_else(|| panic!("input mismatch")).parse().unwrap_or_else(|e| panic!("{}", e))
				}
			}
		)* }
	}
	read_primitives!(String, bool, f64, i32, i64, usize, u32, u64);
	impl<'a, T> FromLn<'a> for Vec<T> where T: for<'b> FromLn<'b> {
		fn fromln(it: &mut I) -> Vec<T> {
			let mut vs = vec![];
			while it.peek().is_some() {
				vs.push(T::fromln(it));
			}
			vs
		}
	}
	impl<'a> FromLn<'a> for Vec<char> {
		fn fromln(it: &mut I) -> Vec<char> {
			String::fromln(it).chars().collect()
		}
	}
	impl<'a> FromLn<'a> for Vec<u8> {
		fn fromln(it: &mut I) -> Vec<u8> {
			String::fromln(it).into()
		}
	}
	macro_rules! read_tuple {
		($($t:ident),*) => {
			impl<'a, $($t),*> FromLn<'a> for ($($t),*) where $($t: for<'b> FromLn<'b>),* {
				fn fromln(it: &mut I) -> ($($t),*) {
					($($t::fromln(it)),*)
				}
			}
		}
	}
	read_tuple!(A, B);
	read_tuple!(A, B, C);
	read_tuple!(A, B, C, D);
	pub trait SetMin {
		fn setmin(&mut self, v: Self) -> bool;
	}
	impl<T> SetMin for T where T: PartialOrd {
		fn setmin(&mut self, v: T) -> bool {
			*self > v && { *self = v; true }
		}
	}
	pub trait SetMax {
		fn setmax(&mut self, v: Self) -> bool;
	}
	impl<T> SetMax for T where T: PartialOrd {
		fn setmax(&mut self, v: T) -> bool {
			*self < v && { *self = v; true }
		}
	}
}
use self::template::*;
pub fn main() {
	let _ = writeln!(::std::io::stderr(), "----- {} -----", file!());
	let _ = ::std::thread::Builder::new().name("run".to_string()).stack_size(32 * 1024 * 1024).spawn(run).unwrap().join();
}
////////////////////////////////////////////////////////////////////////////////////////////////////

const INF: i64 = 1 << 60;

fn run() {
	let (n, m, mut s, mut t) = readln::<(usize, usize, usize, usize)>();
	s -= 1;
	t -= 1;
	let mut g = vec![vec![]; n];
	for (u, v, a, b) in readlns::<(usize, usize, i64, i64)>(m) {
		g[u - 1].push((v - 1, a, b));
		g[v - 1].push((u - 1, a, b));
	}
	let mut dist_f = vec![INF; n];
	let mut que = BinaryHeap::new();
	que.push((0, s));
	dist_f[s] = 0;
	while let Some((d, u)) = que.pop() {
		let d = -d;
		if dist_f[u] != d {
			continue;
		}
		for &(v, w, _) in &g[u] {
			if dist_f[v].setmin(d + w) {
				que.push((-dist_f[v], v));
			}
		}
	}
	let mut dist_b = vec![INF; n];
	let mut que = BinaryHeap::new();
	que.push((0, t));
	dist_b[t] = 0;
	while let Some((d, u)) = que.pop() {
		let d = -d;
		if dist_b[u] != d {
			continue;
		}
		for &(v, _, w) in &g[u] {
			if dist_b[v].setmin(d + w) {
				que.push((-dist_b[v], v));
			}
		}
	}
	let mut ans = vec![INF; n];
	for i in (0..n).rev() {
		ans[i] = dist_f[i] + dist_b[i];
		if i + 1 < n {
			ok!(ans[i].setmin(ans[i + 1]));
		}
	}
	for a in ans {
		println!("{}", 1000000000000000 - a);
	}
}


Measured memory_bytes: 28532