
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define MAX_TOCAKA 100

int broj_tocaka;
double duljina;

struct {
         int x,y;
       } tocke[MAX_TOCAKA];

struct brid {
              int vrh1,vrh2,duljina;
            } bridovi[MAX_TOCAKA * (MAX_TOCAKA - 1) / 2];

void ucitaj_podatke(void)
{
  int i;
  FILE *fp;

  fp = fopen("PUT.IN","rt");

  fscanf(fp,"%d",&broj_tocaka);

  for (i = 0;i < broj_tocaka;++i)
    fscanf(fp,"%d%d",&tocke[i].x,&tocke[i].y);

  fclose(fp);
}

int sort_function(const void *a,const void *b)
{
  if ((*((struct brid *) a)).duljina < (*((struct brid *) b)).duljina)
    return 1;

  return -1;
}

void rijesi(void)
{
  int i,j;
  int broj_bridova,broj_bridova_u_stablu;
  int vrhovi_u_stablu[MAX_TOCAKA];
  int bridovi_u_stablu[MAX_TOCAKA * (MAX_TOCAKA - 1) / 2];
  int brojac;

  broj_bridova = 0;

  for (i = 0;i < broj_tocaka - 1;++i)
    for (j = i + 1;j < broj_tocaka;++j)
    {
      bridovi[broj_bridova].vrh1 = i;
      bridovi[broj_bridova].vrh2 = j;
      bridovi[broj_bridova++].duljina = pow(tocke[i].x - tocke[j].x,2) +
                                        pow(tocke[i].y - tocke[j].y,2);
    }

  qsort((void *) bridovi,broj_bridova,sizeof(bridovi[0]),sort_function);

  for (i = 0;i < broj_tocaka;++i)
    vrhovi_u_stablu[i] = 0;

  for (i = 0;i < broj_bridova;++i)
    bridovi_u_stablu[i] = 0;

  bridovi_u_stablu[0] = 1;
  vrhovi_u_stablu[bridovi[0].vrh1] = 1;
  vrhovi_u_stablu[bridovi[0].vrh2] = 1;

  broj_bridova_u_stablu = 1;
  do
  {
    if (broj_bridova_u_stablu == broj_tocaka - 1)
      break;

    brojac = 1;

    while ((vrhovi_u_stablu[bridovi[brojac].vrh1] &&
            vrhovi_u_stablu[bridovi[brojac].vrh2]) ||
           (!vrhovi_u_stablu[bridovi[brojac].vrh1] &&
            !vrhovi_u_stablu[bridovi[brojac].vrh2]))
      ++brojac;

    bridovi_u_stablu[brojac] = 1;
    vrhovi_u_stablu[bridovi[brojac].vrh1] = 1;
    vrhovi_u_stablu[bridovi[brojac].vrh2] = 1;

    ++broj_bridova_u_stablu;
  } while (1);

  duljina = 0;

  for (i = 0;i < broj_bridova;++i)
    if (bridovi_u_stablu[i])
      duljina += sqrt(bridovi[i].duljina);
}

void zapisi_rjesenje(void)
{
  FILE *fp;

  fp = fopen("PUT.OUT","wt");

  fprintf(fp,"%f\n",duljina);

  fclose(fp);
}

int main(void)
{
  ucitaj_podatke();
  rijesi();
  zapisi_rjesenje();

  return 0;
}
