#include <iostream>
#include <vector>
#include <bits/stdc++.h>
using namespace std;
vector<int> used, dist, par;
vector<vector<pair<int,int> > > g;
int n, inf=1e9;
void dijkstra(int v){
	dist[v]=0;
	int mn=0;
	while(mn!=inf){
		used[v]=1;
		for(auto [x,y]:g[v]){
			if(dist[x]>dist[v]+y){
				dist[x]=dist[v]+y;
				par[x]=v;
			}
		}
		mn=inf;
		for(int i=0;i<n; i++){
			if (dist[i]<mn && !used[i]){
				mn=dist[i];
				v=i;
			}
		}
		
	}
}
int main() {
	int s,f;
	cin>>n>>s>>f;
	s--;f--;
	used.assign(n,0);
	dist.assign(n,inf);
	par.assign(n,-1);
	g.resize(n);
	for(int i=0; i<n; i++)
		for(int j=0; j<n; j++){
			int x;
			cin>>x;
			if(x!=-1 && i!=j){
				g[i].push_back({j,x});
				
			}
		}
	dijkstra(s);
	if(dist[f]==inf) dist[f]=-1;
	cout<<dist[f];
	return 0;
}