func_code_string: #include <bits/stdc++.h>   using namespace std;   struct edge {     int to, next, v;   } e[2005 * 105];   int head[2005], tot, n;   void add(int x, int y, int v) {     e[++tot] = (edge){y, head[x], v};     head[x] = tot;   }   struct Graph {     int S, sz;     bool vis[2005];     long long dis[2005], b[2005];     void work() {       for (int i = 1; i <= n; i++)         if (i != S) dis[i] = (1ll << 62);       for (int i = 1; i <= n; i++) {         int k = 0;         for (int j = 1; j <= n; j++)           if (!vis[j] && (!k || dis[j] < dis[k])) k = j;         vis[k] = 1;         for (int j = head[k]; j; j = e[j].next)           dis[e[j].to] = min(dis[e[j].to], dis[k] + e[j].v);       }       memcpy(b, dis, sizeof(b));       sort(b + 1, b + n + 1);       sz = unique(b + 1, b + n + 1) - b - 1;       for (int i = 1; i <= n; i++)         dis[i] = lower_bound(b + 1, b + sz + 1, dis[i]) - b;     }   } G[2];   int sz[2005][2005];   long long sum[2005][2005];   long long f[2005][2005][2][2];   bool vis[2005][2005][2][2];   int SZ(int x, int y, int X, int Y) { return sz[x][y] - sz[X][Y]; }   long long SUM(int x, int y, int X, int Y) { return sum[x][y] - sum[X][Y]; }   long long DP(int x, int y, int who, int can) {     if (x > G[0].sz || y > G[1].sz) return 0;     if (vis[x][y][who][can]) return f[x][y][who][can];     vis[x][y][who][can] = 1;     long long ans;     if (who)       ans = DP(x, y + 1, who, can || SZ(x, y, x, y + 1)) + SUM(x, y, x, y + 1);     else       ans = DP(x + 1, y, who, can || SZ(x, y, x + 1, y)) + SUM(x, y, x + 1, y);     if (can) ans = max(ans, -DP(x, y, who ^ 1, 0));     return f[x][y][who][can] = ans;   }   int m, v[2005];   int main() {     scanf( %d%d%d%d , &n, &m, &G[0].S, &G[1].S);     for (int i = 1; i <= n; i++) scanf( %d , &v[i]);     for (int i = 1; i <= m; i++) {       int x, y, v;       scanf( %d%d%d , &x, &y, &v);       add(x, y, v);       add(y, x, v);     }     G[0].work();     G[1].work();     for (int i = 1; i <= n; i++) {       sz[G[0].dis[i]][G[1].dis[i]]++;       sum[G[0].dis[i]][G[1].dis[i]] += v[i];     }     for (int i = G[0].sz; i; i--)       for (int j = G[1].sz; j; j--) {         sz[i][j] += sz[i][j + 1] + sz[i + 1][j] - sz[i + 1][j + 1];         sum[i][j] += sum[i][j + 1] + sum[i + 1][j] - sum[i + 1][j + 1];       }     long long ans = DP(1, 1, 0, 0);     if (ans == 0)       puts( Flowers );     else if (ans < 0)       puts( Cry );     else       puts( Break a heart );   }   