#include<stdio.h>
int p,q,u,v,n;
int min=99;
int minCost=0;
int t[50][2],i,j;
int parent[50],edge[50][50];

int main(){
    clrsrc();
    printf("\nEnter the number of nodes");
    scanf("%d",&n);
    for(i=0;i<n;i++){
        printf("%d",i);
        parent[i]=-1;
    }
    printf("\n");
    for(i=0;i<n;i++){
        printf("%c",65+i);
        for(j=0;j<n;j++){
            scanf("%d",&edge[i][j]);
        }
        for(i=0;i<n;i++){
            for(j=0;j<n;j++){
                if(edge[1][j]!=99){
                    if(min<edge[i][j]){
                        min=edge[i][j];
                        u=i;
                        v=j;
                    }
                    p=find(u);
                    q=find(v);
                    
                    if(p!=q){
                        t[i][0]=u;
                        t[i][1]=v;
                        minCost =minCost+edge[u][v];
                        sunion(p,q);
                    }
                    else{
                        t[i][0]=-1;
                        t[i][1]=-1;
                    }
                }
            }
        }
        min = 99;
    }
    printf("Minimum cost is %d\n Minimum spanning tree is\n",minCost);
    for(i=0;i<n;i++){
        if(t[i][0]!=-1 && t[i][1]!=1){
            printf("%c %c %d",65+t[i][0],65+t[i][1],edge[t[i][0]] [t[i][1]]);
            printf("\n");
        }
        getch();
    }
    sunion(int I,int m){
        parent[] = m;
    }
    find(int I){
        if(parent[1]>0){
            I=parent[I];
        }
        return I;
    }
}