#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#include <queue>
#define MAX_V 1001
#define INF 99999999
using namespace std;

int N, M, K, sum, idx;
int parent[MAX_V];
vector<pair<int, pair<int, pair<int, int>>>> edges; //순서대로 가중치, 선택여부, u, v
struct UnionFind
{
    int getParent (int x)
    {
        if (parent[x] == x) return x;
        return parent[x] = getParent(parent[x]);
    }

    void unionParent (int a, int b)
    {
        a = getParent(a);
        b = getParent(b);

        if (a < b) parent[b] = a;
        else    parent[a] = b;
    }

    int findParent (int a, int b)
    {
        a = getParent(a);
        b = getParent(b);

        if (a == b) return 1;
        else return 0;
    }
};

int kruskal (int V)
{
    int minDist = INF;
    int ret = 0;

    UnionFind uf;
    for (int i = 0; i < edges.size(); i++)
    {
        int cost = edges[i].first;
        int selected = edges[i].second.first;
        int u = edges[i].second.second.first, v = edges[i].second.second.second;

        if (uf.findParent(u, v))    continue;

        else
        {
            if (!selected)
            {
                if (minDist > cost)
                {
                    minDist = cost;
                    idx = i;
                }
                uf.unionParent(u, v);
                ret += cost;
            }
        }
    }
    if (edges[idx].first == edges[idx + 1].first)
    {
        edges[idx].second.first = true;
        edges[idx + 1].second.first = true;
    }
    else if (edges[idx - 1].first == edges[idx].first)
    {
        edges[idx].second.first = true;
        edges[idx + 1].second.first = true;    
    }

    return ret;
}

bool isAllConnected()
{
    int base = parent[1];
    for (int i = 2; i <= N; i++)
        if (base != parent[i])  return false;
    return true;
}

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    cin >> N >> M >> K;
    for (int i = 1; i <= M; i++)
    {
        int u, v;
        cin >> u >> v;
        edges.push_back(make_pair(i, make_pair(false, make_pair(u, v))));
        edges.push_back(make_pair(i, make_pair(false, make_pair(v, u))));
    }
    sort(edges.begin(), edges.end());

    bool flag = false;
    while (K--)
    {
        if (!flag)
        {
            for (int i = 1; i <= N; i++)
                parent[i] = i;
            sum = kruskal(N);

            if (isAllConnected())
            {
                cout << sum << ' ';
            }
            else
            {
                flag = true;
                cout << 0 << ' ';
            }
        }
        else
        {
            cout << 0 << ' ';
        }
    }
    return 0;
}


왜그런거죠ㅛ...? 도와주세요 PS 고수님들