func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MOD = 998244353;   long long POW(long long a, long long b, long long MMM = MOD) {     long long ret = 1;     for (; b; b >>= 1, a = (a * a) % MMM)       if (b & 1) ret = (ret * a) % MMM;     return ret;   }   long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }   long long lcm(long long a, long long b) {     if (a == 0 || b == 0) return a + b;     return a * (b / gcd(a, b));   }   int dx[] = {0, 1, 0, -1, 1, 1, -1, -1}, dy[] = {1, 0, -1, 0, 1, -1, 1, -1};   int ddx[] = {-1, -2, 1, -2, 2, -1, 2, 1}, ddy[] = {-2, -1, -2, 1, -1, 2, 1, 2};   struct Edge {     int to, r;     Edge* ori;     Edge* rev;     Edge(int T, int R) { to = T, r = R; }   };   vector<Edge*> v[2605];   void addedge(int f, int t, int r) {     Edge* ori = new Edge(t, r);     Edge* rev = new Edge(f, 0);     ori->rev = rev;     rev->rev = ori;     v[f].push_back(ori);     v[t].push_back(rev);   }   const int S = 2603, T = 2604;   int level[2605], work[2605];   bool bfs() {     memset((level), -1, sizeof(level));     ;     level[S] = 0;     queue<int> q;     q.push(S);     while (!q.empty()) {       int x = q.front();       q.pop();       for (auto& nn : v[x]) {         int next = nn->to;         if (level[next] == -1 && nn->r > 0) {           level[next] = level[x] + 1;           q.push(next);         }       }     }     return level[T] != -1;   }   int dfs(int N, int des, int flow) {     if (N == des) return flow;     for (int& i = work[N]; i < v[N].size(); i++) {       int next = v[N][i]->to;       if (level[next] == level[N] + 1 && v[N][i]->r > 0) {         int df = dfs(next, des, min(v[N][i]->r, flow));         if (df > 0) {           v[N][i]->r -= df;           v[N][i]->rev->r += df;           return df;         }       }     }     return 0;   }   int main() {     int n, h, m;     scanf( %d%d%d , &n, &h, &m);     int ans = n * h * h;     for (int(i) = (0); (i) <= (n - 1); (i) += (1)) {       addedge(S, i * 51, h * h);       for (int(j) = (1); (j) <= (h); (j) += (1))         addedge(51 * i + j - 1, 51 * i + j, h * h - j * j);     }     for (int(i) = (0); (i) <= (m - 1); (i) += (1)) {       int x, y, z, w;       scanf( %d%d%d%d , &x, &y, &z, &w);       x--, y--;       for (int(j) = (x); (j) <= (y); (j) += (1))         addedge(51 * j + z, 2551 + i, 987654321);       addedge(2551 + i, T, w);     }     while (bfs()) {       memset((work), 0, sizeof(work));       ;       while (1) {         int f = dfs(S, T, 987654321);         if (f == 0) break;         ans -= f;       }     }     printf( %d n , ans);   }   