#include <bits/stdc++.h>   using namespace std;   const long long max_N = 100003;   const long long max_M = 200003;   vector<pair<long long, long long> > briaunos[max_N];   bool nepavyko_uzdavinys = false;   struct reiskinys {     long long skaicius, a;     long double a_reiksme;     bool isreikstas;     bool isvestas;     long double a_reiksme_kai_reisinys_nulis;     reiskinys() {       isreikstas = false;       isvestas = false;       skaicius = 0;       a = 0;     }     void tapk_pradiniu() {       skaicius = 0;       a = 1;       isreikstas = true;     }     long double reiksme() {       return (long double)a_reiksme * (long double)a + (long double)skaicius;     }     void kada_tampa_nuliu() {       if ((a == 0) && (skaicius == 0))         a_reiksme_kai_reisinys_nulis = 0;       else if (a == 0)         a_reiksme_kai_reisinys_nulis = 1000000000;       else         a_reiksme_kai_reisinys_nulis =             ((long double)0 - (long double)skaicius) / (long double)a;     }     bool operator<(const reiskinys &kitas) const {       return a_reiksme_kai_reisinys_nulis < kitas.a_reiksme_kai_reisinys_nulis;     }   };   reiskinys virsuniu_reiksmes[max_N];   void isreisk(reiskinys &turimas, reiskinys &norimas, long long suma) {     norimas.a = 0 - turimas.a;     norimas.skaicius = suma - turimas.skaicius;     norimas.isreikstas = true;   }   pair<bool, long double> rask_a_reiksme(reiskinys &pirmas, reiskinys &antras,                                          long double suma) {     long long skaicius = 0 - (suma - pirmas.skaicius - antras.skaicius);     long long a = 0 - pirmas.a - antras.a;     if ((a == 0) && (skaicius != 0)) {       nepavyko_uzdavinys = true;       return {false, 0};     } else if (a == 0) {       return {false, 0};     } else {       long double a_reiksme = (long double)skaicius / (long double)a;       return {true, a_reiksme};     }   }   bool tenkina(reiskinys &pirmas, reiskinys &antras, long double suma) {     if (pirmas.reiksme() + antras.reiksme() == suma) return true;     return false;   }   void ieskok_minimalaus_a(vector<long long> komponente) {     for (long long i = 0; i < komponente.size(); i++) {       virsuniu_reiksmes[komponente[i]].kada_tampa_nuliu();     }     sort(komponente.begin(), komponente.end(), [&](long long &i, long long &j) {       return virsuniu_reiksmes[i] < virsuniu_reiksmes[j];     });     reiskinys neigiami;     reiskinys teigiami;     long double a_reiksme =         virsuniu_reiksmes[komponente[0]].a_reiksme_kai_reisinys_nulis - 1;     bool ar_teigiamas[komponente.size()];     for (long long i = 0; i < komponente.size(); i++) {       virsuniu_reiksmes[komponente[i]].a_reiksme = a_reiksme;       if (virsuniu_reiksmes[komponente[i]].reiksme() > (long double)0) {         ar_teigiamas[i] = true;         teigiami.a += virsuniu_reiksmes[komponente[i]].a;         teigiami.skaicius += virsuniu_reiksmes[komponente[i]].skaicius;       } else {         ar_teigiamas[i] = false;         neigiami.a -= virsuniu_reiksmes[komponente[i]].a;         neigiami.skaicius -= virsuniu_reiksmes[komponente[i]].skaicius;       }     }     neigiami.a_reiksme = a_reiksme;     teigiami.a_reiksme = a_reiksme;     long double minimalus_ats = teigiami.reiksme() + neigiami.reiksme();     long double minimali_a_reiksme = a_reiksme;     for (long long i = 0; i < komponente.size(); i++) {       long double a_reiksme =           virsuniu_reiksmes[komponente[i]].a_reiksme_kai_reisinys_nulis;       neigiami.a_reiksme = a_reiksme;       teigiami.a_reiksme = a_reiksme;       if (ar_teigiamas[i]) {         teigiami.a -= virsuniu_reiksmes[komponente[i]].a;         teigiami.skaicius -= virsuniu_reiksmes[komponente[i]].skaicius;         neigiami.a -= virsuniu_reiksmes[komponente[i]].a;         neigiami.skaicius -= virsuniu_reiksmes[komponente[i]].skaicius;       } else {         neigiami.a += virsuniu_reiksmes[komponente[i]].a;         neigiami.skaicius += virsuniu_reiksmes[komponente[i]].skaicius;         teigiami.a += virsuniu_reiksmes[komponente[i]].a;         teigiami.skaicius += virsuniu_reiksmes[komponente[i]].skaicius;       }       if (teigiami.reiksme() + neigiami.reiksme() < minimalus_ats) {         minimalus_ats = teigiami.reiksme() + neigiami.reiksme();         minimali_a_reiksme = a_reiksme;       }     }     for (long long i = 0; i < komponente.size(); i++)       virsuniu_reiksmes[komponente[i]].a_reiksme = minimali_a_reiksme;   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(NULL);     cout.tie(NULL);     long long N, M;     cin >> N >> M;     for (long long i = 0; i < M; i++) {       long long a, b, tipas;       cin >> a >> b >> tipas;       briaunos[a].push_back({b, tipas});       briaunos[b].push_back({a, tipas});     }     bool surastas[N + 1];     for (long long i = 1; i <= N; i++) surastas[i] = false;     for (long long i = 1; i <= N; i++) {       if (surastas[i]) continue;       queue<long long> eile;       vector<long long> komponente;       eile.push(i);       komponente.push_back(i);       surastas[i] = true;       virsuniu_reiksmes[i].tapk_pradiniu();       while (!eile.empty()) {         long long g = eile.front();         eile.pop();         for (long long j = 0; j < briaunos[g].size(); j++) {           long long kitas = briaunos[g][j].first;           if (surastas[kitas]) continue;           if (g == kitas) continue;           isreisk(virsuniu_reiksmes[g], virsuniu_reiksmes[kitas],                   briaunos[g][j].second);           surastas[kitas] = true;           eile.push(kitas);           komponente.push_back(kitas);         }       }       bool radau_a_reiksme = false;       long double a_reiksme;       for (long long j = 0; j < komponente.size(); j++) {         long long dab = komponente[j];         for (long long x = 0; x < briaunos[dab].size(); x++) {           long long kitas = briaunos[dab][x].first;           pair<bool, long double> ats =               rask_a_reiksme(virsuniu_reiksmes[dab], virsuniu_reiksmes[kitas],                              briaunos[dab][x].second);           radau_a_reiksme = ats.first;           a_reiksme = ats.second;           if (radau_a_reiksme) {             break;           }         }         if (radau_a_reiksme) break;       }       if (radau_a_reiksme) {         for (long long j = 0; j < komponente.size(); j++) {           virsuniu_reiksmes[komponente[j]].a_reiksme = a_reiksme;         }         for (long long j = 0; j < komponente.size(); j++) {           long long dab = komponente[j];           for (long long x = 0; x < briaunos[dab].size(); x++) {             long long kitas = briaunos[dab][x].first;             if (!tenkina(virsuniu_reiksmes[dab], virsuniu_reiksmes[kitas],                          briaunos[dab][x].second)) {               nepavyko_uzdavinys = true;             }           }         }       } else {         ieskok_minimalaus_a(komponente);       }     }     if (nepavyko_uzdavinys)       cout <<  NO ;     else {       cout <<  YES n ;       for (long long i = 1; i <= N; i++)         cout << fixed << setprecision(9) << virsuniu_reiksmes[i].reiksme() <<    ;     }     return 0;   }