func_code_string: #include <bits/stdc++.h>   using namespace std;   const double eps = 1e-15;   const double pi = acos(-1.0);   const long long Mod = 1000000007;   const int N = 1e3 + 5;   int ks = 0;   int n, m, s, t;   long long dis[N], cost[N * 10], L;   int used[N], deleted[N * 10];   pair<int, int> parent[N];   vector<pair<int, int> > g[N];   struct edge {     int x, y;     long long z;     bool operator<(const edge &f) const { return z > f.z; }   } E[N * 10];   void SPFA() {     for (int i = 0; i < n; i++) {       dis[i] = LLONG_MAX;       used[i] = 0;     }     priority_queue<pair<long long, int>, vector<pair<long long, int> >,                    greater<pair<long long, int> > >         q;     q.emplace(0, s);     dis[s] = 0;     while (q.size()) {       int from = q.top().second;       used[from] = 1;       q.pop();       for (auto i : g[from]) {         int to = i.first;         int id = i.second;         if (dis[from] + cost[id] < dis[to]) {           dis[to] = dis[from] + cost[id];           parent[to] = {from, id};           if (!used[to]) q.emplace(dis[to], to);         }       }     }   }   int main() {     scanf( %d%d%I64d%d%d , &n, &m, &L, &s, &t);     for (int i = 0; i < m; i++) {       scanf( %d%d%I64d , &E[i].x, &E[i].y, &E[i].z);     }     sort(E, E + m);     int last = 0;     for (int i = 0; i < m && E[i].z; i++, last++) {       cost[i] = E[i].z;       g[E[i].x].emplace_back(E[i].y, i);       g[E[i].y].emplace_back(E[i].x, i);     }     SPFA();     if (dis[t] < L) {       puts( NO );       return 0;     }     for (int i = last; i < m; i++) {       deleted[i] = cost[i] = 1;       g[E[i].x].emplace_back(E[i].y, i);       g[E[i].y].emplace_back(E[i].x, i);     }     SPFA();     if (dis[t] > L) {       puts( NO );       return 0;     }     puts( YES );     while (dis[t] < L) {       int cur = t;       while (cur != s) {         int id = parent[cur].second;         cur = parent[cur].first;         if (deleted[id]) {           cost[id] += L - dis[t];           break;         }       }       SPFA();     }     bool done[N];     memset(done, false, sizeof done);     for (int i = 0; i < n; i++) {       for (auto j : g[i]) {         if (done[j.first]) continue;         cout << i <<     << j.first <<     << cost[j.second] <<   n ;       }       done[i] = true;     }   }   