This documentation is automatically generated by competitive-verifier/competitive-verifier
 Matching on General Graph (Tutte matrix) (verify/linalg/tutte.test.cpp)
 Matching on General Graph (Tutte matrix) (verify/linalg/tutte.test.cpp)
 cp-algo/linalg/matrix.hpp
 cp-algo/linalg/matrix.hpp cp-algo/linalg/vector.hpp
 cp-algo/linalg/vector.hpp cp-algo/math/common.hpp
 cp-algo/math/common.hpp cp-algo/number_theory/modint.hpp
 cp-algo/number_theory/modint.hpp cp-algo/random/rng.hpp
 cp-algo/random/rng.hpp cp-algo/util/big_alloc.hpp
 cp-algo/util/big_alloc.hpp cp-algo/util/checkpoint.hpp
 cp-algo/util/checkpoint.hpp cp-algo/util/simd.hpp
 cp-algo/util/simd.hpp// @brief Matching on General Graph (Tutte matrix)
#define PROBLEM "https://judge.yosupo.jp/problem/general_matching"
#pragma GCC optimize("Ofast,unroll-loops")
#pragma GCC target("tune=native")
#include "cp-algo/linalg/matrix.hpp"
#include "cp-algo/random/rng.hpp"
#include <bits/stdc++.h>
using namespace std;
using namespace cp_algo::math;
using namespace cp_algo::linalg;
using namespace cp_algo::random;
const int64_t mod = 998244353;
using base = modint<mod>;
void solve() {
    int n, m;
    cin >> n >> m;
    matrix<base> T(n);
    for(int i = 0; i < m; i++) {
        int u, v;
        cin >> u >> v;
        base x = rng();
        T[u][v] += x;
        T[v][u] -= x;
    }
    auto [pivots, free] = matrix(T).echelonize();
    matrix<base> B(size(pivots));
    for(int i = 0; i < ssize(pivots); i++) {
        for(int j = 0; j < ssize(pivots); j++) {
            B[i][j] = T[pivots[i]][pivots[j]];
        }
    }
    auto [d, Bi] = B.inv();
    vector<pair<int, int>> ans;
    for(size_t i = 0; i < size(pivots); i++) {
        for(size_t j = 0; j < size(pivots); j++) {
            if(T[pivots[i]][pivots[j]] != 0 && Bi[i][j] != 0) {
                ans.emplace_back(pivots[i], pivots[j]);
                Bi.eliminate<gauss_mode::reverse>(i, j);
                Bi.eliminate<gauss_mode::reverse>(j, i);
                Bi.normalize();
                Bi[i] *= 0;
                Bi[j] *= 0;
            }
        }
    }
    cout << size(ans) << "\n";
    for(auto [u, v]: ans) {
        cout << u << ' ' << v << "\n";
    }
}
signed main() {
    //freopen("input.txt", "r", stdin);
    ios::sync_with_stdio(0);
    cin.tie(0);
    int t = 1;
    // cin >> t;
    while(t--) {
        solve();
    }
}
Traceback (most recent call last):
  File "/home/runner/.local/lib/python3.12/site-packages/competitive_verifier/oj_resolve/resolver.py", line 181, in resolve
    bundled_code = language.bundle(path, basedir=basedir)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/.local/lib/python3.12/site-packages/competitive_verifier/oj/verify/languages/cplusplus.py", line 252, in bundle
    bundler.update(path)
  File "/home/runner/.local/lib/python3.12/site-packages/competitive_verifier/oj/verify/languages/cplusplus_bundle.py", line 327, in update
    assert len(lines) == len(uncommented_lines)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError
| Env | Name | Status | Elapsed | Memory | 
|---|---|---|---|---|
| g++ | example_00 |  AC | 5 ms | 4 MB | 
| g++ | example_01 |  AC | 4 ms | 4 MB | 
| g++ | issue610_00 |  AC | 4 ms | 4 MB | 
| g++ | max_random_00 |  AC | 121 ms | 15 MB | 
| g++ | max_random_01 |  AC | 137 ms | 15 MB | 
| g++ | random_00 |  AC | 12 ms | 5 MB | 
| g++ | random_01 |  AC | 15 ms | 5 MB | 
| g++ | sparse_00 |  AC | 48 ms | 13 MB | 
| g++ | sparse_01 |  AC | 16 ms | 8 MB | 
| g++ | sparse_02 |  AC | 13 ms | 8 MB | 
| g++ | sparse_03 |  AC | 75 ms | 14 MB | 
| g++ | sparse_04 |  AC | 38 ms | 11 MB |