#include #include #include using namespace std; int main(int argc, char* argv[]) { int n = atoi(argv[1]); int m = atoi(argv[2]); int seed = atoi(argv[3]); std::mt19937 rng(seed); std::uniform_int_distribution vertices(1, n); vector > edges; for (int i = 0; i < n - 1; ++i) { edges.push_back(make_pair(i + 1, i + 2)); } for (int i = 0; i < m - (n - 1); ++i) { int a = vertices(rng); int b = vertices(rng); while (a == b) { b = vertices(rng); } if (a < b) { int t = a; a = b; b = t; } edges.push_back(make_pair(a, b)); } // shuffle vertices vector v; for (int i = 0; i < n; ++i) { v.push_back(i); } std::shuffle(v.begin(), v.end(), rng); for (pair& e : edges) { e.first = v[e.first - 1] + 1; e.second = v[e.second - 1] + 1; } // shuffle edges std::shuffle(edges.begin(), edges.end(), rng); cout << n << " " << edges.size() << "\n"; for (const pair e : edges) { cout << e.first << " " << e.second << "\n"; } return 0; }