#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
struct Edge {
int src, dest, weight;
};
class Graph {
int V;
vector<Edge> edges;
public:
Graph(int V) : V(V) {}
void addEdge(int src, int dest, int weight) {
edges.push_back({src, dest, weight});
}
int maxDegree() {
vector<int> degree(V + 1, 0);
for (const auto& edge : edges) {
degree[edge.src]++;
degree[edge.dest]++;
}
return *max_element(degree.begin(), degree.end());
}
int minDegree() {
vector<int> degree(V + 1, 0);
for (const auto& edge : edges) {
degree[edge.src]++;
degree[edge.dest]++;
}
return *min_element(degree.begin(), degree.end());
}
int maxWeightedDegree() {
vector<int> degree(V + 1, 0);
for (const auto& edge : edges) {
degree[edge.src] += edge.weight;
degree[edge.dest] += edge.weight;
}
return *max_element(degree.begin(), degree.end());
}
int minWeightedDegree() {
vector<int> degree(V + 1, 0);
for (const auto& edge : edges) {
degree[edge.src] += edge.weight;
degree[edge.dest] += edge.weight;
}
return *min_element(degree.begin(), degree.end());
}
int totalEdgeWeight() {
int total = 0;
for (const auto& edge : edges) {
total += edge.weight;
}
return total / 2; // Each edge should be counted only once
}
};
int main() {
int n, m;
cin >> n >> m;
Graph graph(n);
for (int i = 0; i < m; ++i) {
int src, dest, weight;
cin >> src >> dest >> weight;
graph.addEdge(src, dest, weight);
}
cout << graph.maxDegree() << endl;
cout << graph.minDegree() << endl;
cout << graph.maxWeightedDegree() << endl;
cout << graph.minWeightedDegree() << endl;
cout << graph.totalEdgeWeight() << endl;
return 0;
}
I2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8Y3N0ZGlvPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxhbGdvcml0aG0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgRWRnZSB7CiAgICBpbnQgc3JjLCBkZXN0LCB3ZWlnaHQ7Cn07CgpjbGFzcyBHcmFwaCB7CiAgICBpbnQgVjsKICAgIHZlY3RvcjxFZGdlPiBlZGdlczsKCnB1YmxpYzoKICAgIEdyYXBoKGludCBWKSA6IFYoVikge30KCiAgICB2b2lkIGFkZEVkZ2UoaW50IHNyYywgaW50IGRlc3QsIGludCB3ZWlnaHQpIHsKICAgICAgICBlZGdlcy5wdXNoX2JhY2soe3NyYywgZGVzdCwgd2VpZ2h0fSk7CiAgICB9CgogICAgaW50IG1heERlZ3JlZSgpIHsKICAgICAgICB2ZWN0b3I8aW50PiBkZWdyZWUoViArIDEsIDApOwogICAgICAgIGZvciAoY29uc3QgYXV0byYgZWRnZSA6IGVkZ2VzKSB7CiAgICAgICAgICAgIGRlZ3JlZVtlZGdlLnNyY10rKzsKICAgICAgICAgICAgZGVncmVlW2VkZ2UuZGVzdF0rKzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICptYXhfZWxlbWVudChkZWdyZWUuYmVnaW4oKSwgZGVncmVlLmVuZCgpKTsKICAgIH0KCiAgICBpbnQgbWluRGVncmVlKCkgewogICAgICAgIHZlY3RvcjxpbnQ+IGRlZ3JlZShWICsgMSwgMCk7CiAgICAgICAgZm9yIChjb25zdCBhdXRvJiBlZGdlIDogZWRnZXMpIHsKICAgICAgICAgICAgZGVncmVlW2VkZ2Uuc3JjXSsrOwogICAgICAgICAgICBkZWdyZWVbZWRnZS5kZXN0XSsrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gKm1pbl9lbGVtZW50KGRlZ3JlZS5iZWdpbigpLCBkZWdyZWUuZW5kKCkpOwogICAgfQoKICAgIGludCBtYXhXZWlnaHRlZERlZ3JlZSgpIHsKICAgICAgICB2ZWN0b3I8aW50PiBkZWdyZWUoViArIDEsIDApOwogICAgICAgIGZvciAoY29uc3QgYXV0byYgZWRnZSA6IGVkZ2VzKSB7CiAgICAgICAgICAgIGRlZ3JlZVtlZGdlLnNyY10gKz0gZWRnZS53ZWlnaHQ7CiAgICAgICAgICAgIGRlZ3JlZVtlZGdlLmRlc3RdICs9IGVkZ2Uud2VpZ2h0OwogICAgICAgIH0KICAgICAgICByZXR1cm4gKm1heF9lbGVtZW50KGRlZ3JlZS5iZWdpbigpLCBkZWdyZWUuZW5kKCkpOwogICAgfQoKICAgIGludCBtaW5XZWlnaHRlZERlZ3JlZSgpIHsKICAgICAgICB2ZWN0b3I8aW50PiBkZWdyZWUoViArIDEsIDApOwogICAgICAgIGZvciAoY29uc3QgYXV0byYgZWRnZSA6IGVkZ2VzKSB7CiAgICAgICAgICAgIGRlZ3JlZVtlZGdlLnNyY10gKz0gZWRnZS53ZWlnaHQ7CiAgICAgICAgICAgIGRlZ3JlZVtlZGdlLmRlc3RdICs9IGVkZ2Uud2VpZ2h0OwogICAgICAgIH0KICAgICAgICByZXR1cm4gKm1pbl9lbGVtZW50KGRlZ3JlZS5iZWdpbigpLCBkZWdyZWUuZW5kKCkpOwogICAgfQoKICAgIGludCB0b3RhbEVkZ2VXZWlnaHQoKSB7CiAgICAgICAgaW50IHRvdGFsID0gMDsKICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGVkZ2UgOiBlZGdlcykgewogICAgICAgICAgICB0b3RhbCArPSBlZGdlLndlaWdodDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRvdGFsIC8gMjsgLy8gRWFjaCBlZGdlIHNob3VsZCBiZSBjb3VudGVkIG9ubHkgb25jZQogICAgfQp9OwoKaW50IG1haW4oKSB7CiAgICBpbnQgbiwgbTsKICAgIGNpbiA+PiBuID4+IG07CgogICAgR3JhcGggZ3JhcGgobik7CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtOyArK2kpIHsKICAgICAgICBpbnQgc3JjLCBkZXN0LCB3ZWlnaHQ7CiAgICAgICAgY2luID4+IHNyYyA+PiBkZXN0ID4+IHdlaWdodDsKICAgICAgICBncmFwaC5hZGRFZGdlKHNyYywgZGVzdCwgd2VpZ2h0KTsKICAgIH0KCiAgICBjb3V0IDw8IGdyYXBoLm1heERlZ3JlZSgpIDw8IGVuZGw7CiAgICBjb3V0IDw8IGdyYXBoLm1pbkRlZ3JlZSgpIDw8IGVuZGw7CiAgICBjb3V0IDw8IGdyYXBoLm1heFdlaWdodGVkRGVncmVlKCkgPDwgZW5kbDsKICAgIGNvdXQgPDwgZ3JhcGgubWluV2VpZ2h0ZWREZWdyZWUoKSA8PCBlbmRsOwogICAgY291dCA8PCBncmFwaC50b3RhbEVkZ2VXZWlnaHQoKSA8PCBlbmRsOwoKICAgIHJldHVybiAwOwp9Cgo=