#include <bits/stdc++.h>   using int64 = long long;   using uint64 = unsigned long long;   using uchar = unsigned char;   constexpr int maxn(200000);   constexpr int maxm(200000);   template <class _Tp>   inline void swap(_Tp& x, _Tp& y) {     _Tp z = x;     x = y;     y = z;   }   template <class _Tp>   inline _Tp Min(const _Tp& x, const _Tp& y) {     return x < y ? x : y;   }   template <class _Tp>   inline _Tp Max(const _Tp& x, const _Tp& y) {     return x > y ? x : y;   }   namespace IOManager {   constexpr int FILESZ(131072);   char buf[FILESZ];   const char *ibuf = buf, *tbuf = buf;   struct IOManager {     inline char gc() {       return (ibuf == tbuf) &&                      (tbuf = (ibuf = buf) + fread(buf, 1, FILESZ, stdin),                       ibuf == tbuf)                  ? EOF                  : *ibuf++;     }     template <class _Tp>     inline operator _Tp() {       _Tp s = 0u;       char c = gc();       for (; c < 48; c = gc())         ;       for (; c > 47; c = gc()) s = (_Tp)(s * 10u + c - 48u);       return s;     }   };   }  // namespace IOManager   IOManager::IOManager io;   struct Edge {     int v;     Edge* las;     inline Edge* init(const int& to, Edge* const& ls) {       return v = to, las = ls, this;     }   } * las[maxn], *lass[maxn];   Edge pool[maxm << 1], *alc = pool - 1;   inline uint64 C2(const int& v) { return (uint64)v * (v - 1ull) >> 1; }   inline uint64 sum(const int& l, const int& r) {     return (uint64)(l + r) * (r - l + 1ull) >> 1;   }   int d[maxn];   struct E {     int u, v;     inline void init() {       ++d[u = io];       ++d[v = io];     }   } e[maxm];   uchar tag[maxn];   int lisl[maxn], lisr[maxn];   int main() {     const int n = io, m = io;     const uint64 A = io, B = io, C = io;     E* const tl = e + m;     for (E* i = e; i != tl; ++i) i->init();     uint64 ans = 0;     for (int u = 0; u != n; ++u)       ans += (A * C2(n - u - 1) + B * u * (n - u - 1ull) + C * C2(u)) * u;     for (E* i = e; i != tl; ++i) {       const int u = i->u, v = i->v;       if (d[u] < d[v] || (d[u] == d[v] && u < v))         las[u] = (++alc)->init(v, las[u]), lass[v] = (++alc)->init(u, lass[v]);       else         las[v] = (++alc)->init(u, las[v]), lass[u] = (++alc)->init(v, lass[u]);       ans -= u < v                  ? A * sum(0, u - 1) + u * (B * u + C * v) +                        B * sum(u + 1, v - 1) + (v - u - 1ull) * (A * u + C * v) +                        C * sum(v + 1, n - 1) + (n - v - 1ull) * (A * u + B * v)                  : A * sum(0, v - 1) + v * (B * v + C * u) +                        B * sum(v + 1, u - 1) + (u - v - 1ull) * (A * v + C * u) +                        C * sum(u + 1, n - 1) + (n - u - 1ull) * (A * v + B * u);     }     for (int u = 0; u != n; ++u) {       int cntl = 0, cntr = 0;       uint64 suml = 0, sumr = 0;       for (Edge* o = las[u]; o; o = o->las)         if (o->v < u)           lisl[++cntl] = o->v, suml += A * o->v;         else           lisr[++cntr] = o->v, sumr += C * o->v;       for (Edge* o = lass[u]; o; o = o->las)         if (o->v < u)           lisl[++cntl] = o->v, suml += A * o->v;         else           lisr[++cntr] = o->v, sumr += C * o->v;       std::sort(lisl + 1, lisl + cntl + 1);       std::sort(lisr + 1, lisr + cntr + 1);       ans += suml * cntr + sumr * cntl + A * u * C2(cntr) + B * u * cntl * cntr +              C * u * C2(cntl);       suml = sumr = 0;       for (int r = 1; r <= cntl; ++r)         ans += suml + B * lisl[r] * (r - 1ull), suml += A * lisl[r];       for (int l = cntr; l; --l)         ans += sumr + B * lisr[l] * (cntr - l), sumr += C * lisr[l];     }     for (int u = 0, mn, mx; u != n; ++u) {       for (Edge* o = las[u]; o; o = o->las) tag[o->v] = 1;       for (Edge* o = las[u]; o; o = o->las)         for (Edge* oo = las[o->v]; oo; oo = oo->las)           if (tag[oo->v]) {             mn = Min(Min(u, o->v), oo->v);             mx = Max(Max(u, o->v), oo->v);             ans -= A * mn + B * (u ^ o->v ^ oo->v ^ mn ^ mx) + C * mx;           }       for (Edge* o = las[u]; o; o = o->las) tag[o->v] = 0;     }     printf( %llu , ans);     return 0;   }