Go: package main

import (
	"bufio"
	"os"
	"strconv"
	"strings"
	"fmt"
	)

var scanner = bufio.NewScanner(os.Stdin)

const INF = 0x7FFFFFFF

func main() {
	for scanner.Scan() {
		n, _ := strconv.Atoi(scanner.Text())
		if n == 0 {
			break
		}
		matrix := make([][]int, 10)
		for i := range matrix {
			matrix[i] = make([]int, 10)
		}
		for i := range matrix {
			for j := range matrix[i] {
				if i == j {
					matrix[i][j] = 0
				} else {
					matrix[i][j] = INF
				}
			}
		}
		num := 0
		for i := 0; i < n; i++ {
			scanner.Scan()
			buf := strings.Split(scanner.Text(), " ")
			from, _ := strconv.Atoi(buf[0])
			to, _ := strconv.Atoi(buf[1])
			cost, _ := strconv.Atoi(buf[2])
			if num < from {
				num = from
			}
			if num < to {
				num = to
			}
			matrix[from][to] = cost
			matrix[to][from] = cost
		}
		num++
		for i := 0; i < num; i++ {
			for j := 0; j < num; j++ {
				for k := 0; k < num; k++ {
					if matrix[j][i]+matrix[i][k] < matrix[j][k] {
						matrix[j][k] = matrix[j][i]+matrix[i][k]
					}
				}
			}
		}
		ans, sum := 0, INF
		for i := 0; i < num; i++ {
			now := 0
			for j := 0; j < num; j++ {
				now += matrix[i][j]
			}
			if sum > now {
				sum = now
				ans = i
			}
		}
		fmt.Println(ans, sum)
	}
}

C++: // Warshall-floyd
#include <iostream>
#include <algorithm>
using namespace std;
#define INF 114514810

int n, a, b, c, v, d[11][11];// v: num of nodes

void init()
{
    for(int i=0; i<n; i++) {
        for(int j=0; j<n; j++) {
            if(i==j)// If not exist cost, cost=INF
                d[i][j] = 0;
            else
                d[i][j] = INF;
        }
    }

}

int main(void)
{
    ios::sync_with_stdio(false);
    while(cin >> n) {
        if(n == 0) break;
        init();

        v = -1;
        for(int i=0; i<n; i++) {
            cin >> a >> b >> c;
            d[a][b] = c; d[b][a] = c;
            v = max(max(v, a), b);
        }
        v++;

        for(int k=0; k<v; k++) {
            for(int i=0; i<v; i++) {
                for(int j=0; j<v; j++) {
                    d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
                }
            }
        }


        int city, dist = INF;
        for(int i=0; i<v; i++) {
            int sum = 0;
            for(int j=0; j<v; j++) {
                sum += d[i][j];
            }
            if(dist > sum) {
                dist = sum;
                city = i;
            }
        }
        cout << city << " " << dist << endl;
    }

    return 0;
}

C++: #include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
#define rep(i,n) for(int i=0;i<n;i++)
#define INF (1<<21)
int main(){
	int m;
	while(cin >> m , m){
		int wf[10][10] = {0};
		rep(i,10)rep(j,10)wf[i][j] = INF;
		rep(i,10)wf[i][i] = 0;
		int n = 0;
		rep(i,m){
			int a,b,c;
			cin >> a >> b >> c;
			wf[a][b] = wf[b][a] = c;
			n = max(n,max(a,b)+1);
		}
		rep(k,n)rep(i,n)rep(j,n)
			wf[i][j] = min(wf[i][j] , wf[i][k]+wf[k][j]);
		
		pair<int,int> d = make_pair(INF,-1);

		rep(i,n){
			int sum = 0;
			rep(j,n)sum += wf[i][j];
			d = min(d,make_pair(sum,i));
		}
		cout << d.second << " " << d.first << endl;
	}
}

C++: #include<functional>
#include<algorithm>
#include<iostream>
#include<utility>
#include<string>
#include<vector>
#include<cmath>
#include<stack>
#include<queue>
#include<deque>
#include<map>
#define rep(i,n) for(int i=0;i<n;i++)
#define loop(i,x,n) for(int i=x;i<n;i++)
#define pf push_front
#define pb push_back
#define int long long
using namespace std;
const int INF=1000000007;
int dx[4]={1,0,-1,0};
int dy[4]={0,1,0,-1};
const int N=11;

int mp[N][N];


int bfs(int n,int p){
  vector<int> time(n);
  queue<int> que;
  rep(i,n)time[i]=INF;
  time[p]=0;
  que.push(p);
  int u;
  while(!que.empty()){
    u=que.front(),que.pop();
   
    rep(i,n){
      if(time[i]>time[u]+mp[u][i]){
        time[i]=time[u]+mp[u][i];
        que.push(i);
      }
    }
  }
  int sum=0;
  rep(i,time.size())sum+=time[i];
  return sum;
}

signed main(){
  int n;
  while(cin>>n,n!=0){ 
    rep(i,n)rep(j,n) mp[i][j]=(i==j?0:INF);
    int machi[N]={};
    rep(i,n){
      int a,b,c;
      cin>>a>>b>>c;
      mp[a][b]=mp[b][a]=c;
      machi[a]++;
      machi[b]++;
    }
    int c=0;
    rep(i,N){
      if(machi[i]>0)c++;
    }
    int minsum=INF,city;
    rep(i,n){
      int tmp=bfs(c,i);
    
      if(minsum>tmp){
        minsum=tmp;
        city=i;
      }
    }
    cout<<city<<' '<<minsum<<endl;

  }
  return 0;
}

C++: #include <stdio.h>

#define TEST 0
int weakdist(int tc[10][10],int town,int from,int to)
{
    if(from ==to)
        return 0;
    if(tc[from][to] >= 0)
        return tc[from][to];
    return -1;
}

int dist(int tc[10][10],int town,int from,int to)
{
    if(from ==to)
        return 0;
    if(tc[from][to] >= 0)
        return tc[from][to];
    int mindist=-1;
    for(int via=0;via<town;via++)
    {
        if(via == from || via ==to)
            continue;
        if(tc[from][via] == -1 || tc[via][to]==-1)
            continue;
        int sumdist=dist(tc,town,from,via)
        +dist(tc,town,via,to);
        if(mindist < 0 || mindist > sumdist)
            mindist=sumdist;
    }
    tc[from][to]=mindist;
    tc[to][from]=mindist;
    return mindist;
}
void dump(int tc[10][10])
{
    
        for(int i=0;i<10;i++)
        {
            for(int j=0;j<10;j++)
            {
                printf("%d ",tc[i][j]);
            }
            puts("");
        }
}

int main(void)
{
    int n;
    int tc[10][10];//connections between towns
    while(scanf("%d",&n) == 1 && n != 0)
    {
        int town=0;
        for(int i=0;i<10;i++)
        {
            for(int j=0;j<10;j++)
            {
                tc[i][j]=-1;
            }
            tc[i][i]=0;
        }
        for(int k=0;k<n;k++)
        {
            int a,b,c;
            scanf("%d%d%d",&a,&b,&c);
            if(a==b)
                continue;
            tc[a][b]=c;
            tc[b][a]=c;
            if(town <a+1)town=a+1;
            if(town <b+1)town=b+1;
        }
#if TEST
        dump(tc);
        printf("town.num=%d\n",town);
#endif
        int minsum=-1;
        int minnum=-1;
        for(int i=0;i<town;i++)
        {
            int sum=0;
            for(int j=0;j<town;j++)
            {
#if TEST
                printf("calc [%d,%d]\n",i,j);
#endif
                sum+=dist(tc,town,i,j);
#if TEST
                dump(tc);
#endif
            }
            if(minsum<0 || minsum >sum)
            {
                minsum=sum;
                minnum=i;
            }
        }
        printf("%d %d\n",minnum,minsum);
    }
    return 0;

}