#include <stdio.h>

int ans;
int sum;
int n;
int g1, g2;
int dcost[100][100];
void dfs(int);


main(){
  int m, i, j, k, c, b1, b2, s;

  while(1){
    scanf("%d %d %d %d %d", &n, &m, &s, &g1, &g2);
    if(n==0 && m==0 && s==0 && g1==0 && g2==0) break;
    s--;
    g1--;
    g2--;
    for(i=0;i<n;i++){
      for(j=0;j<n;j++){
	if(i==j){
	  dcost[i][j]=0;
	  continue;
	}
	dcost[i][j]=2000000;
      }
    }

    for(i=0;i<m;i++){
      scanf("%d %d %d", &b1, &b2, &c);
      b1--;
      b2--;
      dcost[b1][b2]=c;
    }
	  
    for(k=0;k<n;k++){
      for(i=0;i<n;i++){
	for(j=0;j<n;j++){
	  if(dcost[i][j]>(dcost[i][k]+dcost[k][j])){
	    dcost[i][j]=dcost[i][k]+dcost[k][j];
	  }
	}
      }
    }

    for(i=0;i<n;i++){
      for(j=0;j<n;j++){
	printf("%8d", dcost[i][j]);
      }
      printf("\n");
    }
    ans=2000000;
    sum=0;
    dfs(s);

    printf("%d\n", ans);
  }
  return 0;
}


void dfs(int now){
  int i;
  int temp;
  if(dcost[now][g1]!=0 && dcost[now][g1]!=2000000 && dcost[now][g2]!=0 && dcost[now][g2]!=2000000){
    temp=sum+dcost[now][g1]+dcost[now][g2];
    if(ans>temp) ans=temp;
  }
  for(i=0;i<n;i++){
    if(dcost[now][i]!=0 && dcost[now][i]!=2000000){
      sum+=dcost[now][i];
      dfs(i);
      sum-=dcost[now][i];
    }
  }
}