Переделать код из C++ в C#

Я написал код на c++, но мне нужно его сделать на c#, а синтаксис не знаю , к сожалению. Буду рад , если поможете переделать его под c#. Задание состоит в том , чтобы посчитать компоненты связанности в неориентированном графе.

Во входном файле записано два числа N и M (0 < N ≤ 100000, 0 ≤ M ≤ 100000). В следующих M строках записаны по два числа i и j (1 ≤ i, j ≤ N), которые означают, что вершины i и j соединены ребром.

Формат вывода

В первой строчке выходного файла выведите количество компонент связности. Далее выведите сами компоненты связности в следующем формате: в первой строке количество вершин в компоненте, во второй - сами вершины в порядке возрастания. Входные данные: (6 4) (3 1) (1 2) (5 4) (2 3)

Выходные данные: (3) (3) (1 2 3) (2) (4 5) (1) (6)

#include <iostream>
#include <vector>
#include <queue>
using namespace std;
 
vector<vector<int>> connectedComponents(const vector<vector<int>>& a)
{
    int n = a.size();
    vector<bool> mark(n, false);
    vector<vector<int>> res;
    for (int i = 0; i < n; ++i) {
        if (mark[i] == false) {
            mark[i] = true;
            vector<int> cur;
            cur.push_back(i);
            queue<int> q;
            q.push(i);
            while (!q.empty()) {
                int x = q.front();
                q.pop();
                for (int i = 0; i < a[x].size(); ++i) {
                    int c = a[x][i];
                    if (mark[c]) {
                        continue;
                    }
                    mark[c] = true;
                    q.push(c);
                    cur.push_back(c);
                }
            }
            res.push_back(cur);
        }
    }
    return res;
}
 
int main()
{
    int n, m;
    cin >> n >> m;
    vector<vector<int>> a(n, vector<int>());
    for (int i = 0; i < m; ++i) {
        int x,y;
        cin >> x >> y;
        --x;
        --y;
        a[x].push_back(y);
        a[y].push_back(x);
    }
    auto r = connectedComponents(a);
    cout << r.size() << endl;
    for (int i = 0; i < r.size(); ++i) {
        cout << r[i].size() << endl;
        for (int j = 0; j < r[i].size(); ++j) {
            cout << r[i][j]  + 1<< " ";
        }
        cout << endl;
    }
    return 0;
}

Ответы (0 шт):