func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long oo = 1000000000000000000ll;   const int N = 2020, M = 100100;   int i, j, k, n, m, ch, ff, En, s, t, x, y, v, nls;   int h[N], p[N], d[N], z[N], diss[N], dist[N];   long long c[N], Ls[N], Sum[N][N], Num[N][N], f[N][N][2];   struct edge {     int s, n, v;   } E[M << 1];   struct cc {     long long x;     int y;   } QA[N][2], QB[N][2];   void R(int &x) {     ff = x = 0;     ch = getchar();     while (ch <  0  ||  9  < ch) {       if (ch ==  - ) ff = 1;       ch = getchar();     }     while ( 0  <= ch && ch <=  9 ) x = x * 10 + ch -  0 , ch = getchar();     if (ff) x = -x;   }   void E_add(int x, int y, int v) {     E[++En].s = y;     E[En].v = v;     E[En].n = h[x];     h[x] = En;     E[++En].s = x;     E[En].v = v;     E[En].n = h[y];     h[y] = En;   }   int find(long long x) {     int l = 1, r = n, mid;     while (l < r) {       mid = (l + r) >> 1;       if (Ls[mid] == x) return mid;       if (Ls[mid] < x)         l = mid + 1;       else         r = mid - 1;     }     return l;   }   void spfa(int *dis, int x) {     int i, j, k;     memset(c, 60, sizeof c);     memset(z, 0, sizeof z);     i = 0;     j = 1;     d[1] = x;     c[x] = 0;     z[x] = 1;     while (i != j) {       if (++i > n) i = 1;       int u = d[i];       for (k = h[u]; k; k = E[k].n)         if (c[u] + E[k].v < c[E[k].s]) {           c[E[k].s] = c[u] + E[k].v;           if (!z[E[k].s]) {             z[E[k].s] = 1;             if (++j > n) j = 1;             d[j] = E[k].s;           }         }       z[u] = 0;     }     nls = 0;     for (i = 1; i <= n; i++) Ls[i] = c[i];     sort(Ls + 1, Ls + n + 1);     nls = 0;     Ls[n + 1] = -1;     for (i = 1; i <= n; i++)       if (Ls[i] != Ls[i + 1]) Ls[++nls] = Ls[i];     for (i = 1; i <= n; i++) dis[i] = find(c[i]);   }   void Up(cc *a, cc x) {     if (x.x < a[0].x) {       if (a[0].y < x.y) a[1] = a[0];       a[0] = x;       if (a[1].y >= a[0].y) a[1].x = 0, a[1].y = 0;     } else {       if (x.y < a[0].y && x.x < a[1].x) a[1] = x;     }   }   int main() {     memset(f, 190, sizeof f);     R(n);     R(m);     R(s);     R(t);     for (i = 1; i <= n; i++) R(p[i]);     for (i = 1; i <= m; i++) {       R(x);       R(y);       R(v);       E_add(x, y, v);     }     spfa(diss, s);     spfa(dist, t);     for (i = 1; i <= n; i++) {       Sum[diss[i]][dist[i]] += p[i];       Num[diss[i]][dist[i]]++;     }     for (i = n; i >= 0; i--)       for (j = n; j >= 0; j--) {         Sum[i][j] += Sum[i + 1][j] + Sum[i][j + 1] - Sum[i + 1][j + 1];         Num[i][j] += Num[i + 1][j] + Num[i][j + 1] - Num[i + 1][j + 1];       }     for (i = 0; i <= n; i++)       for (j = 0; j <= n; j++)         if (!Num[i][j]) f[i][j][0] = f[i][j][1] = 0;     for (i = n; i >= 1; i--)       for (j = n; j >= 1; j--) {         long long t;         if (QB[j][0].y >= Num[i][j])           t = QB[j][1].x;         else           t = QB[j][0].x;         f[i][j][0] = Sum[i][j] - t;         if (QA[i][0].y >= Num[i][j])           t = QA[i][1].x;         else           t = QA[i][0].x;         f[i][j][1] = Sum[i][j] - t;         cc tt;         tt.x = f[i][j][0];         tt.y = Num[i][j];         Up(QA[i], tt);         tt.x = f[i][j][1];         tt.y = Num[i][j];         Up(QB[j], tt);       }     long long A = f[1][1][0], B = Sum[1][1] - A;     if (A > B)       puts( Break a heart );     else {       if (A == B)         puts( Flowers );       else         puts( Cry );     }   }   