#include <iostream>
using namespace std;
#define MY_INFINITY 10000
#include "adj_list_dir_network.h"
#include "alg6.h"
int main()
{
int n;
cin >> n; // 顶点个数
char *vexs = new char[n]; // 顶点数据
for (int i = 0; i < n; i++) cin >> vexs[i];
int **m= new int *[n]; // 邻接矩阵
for (int i = 0; i < n; i++)
{
m[i] = new int[n];
for (int j = 0; j < n; j++)
cin >> m[i][j];
}
AdjListDirNetwork<char, int> net(vexs, n);
for (int u = 0; u < n; u++)
{ // 生成邻接矩阵的行
for (int v = 0; v < n; v++)
{ // 生成邻接矩阵元素的值
if (m[u][v] != 0) net.InsertEdge(u, v, m[u][v]);
}
}
int i, j, k;
cin >> i >> j >> k;
if (ExistPathLen(net, i, j, k))
cout << vexs[i] << "到" << vexs[j] << "【存在】长度为" << k << "路径" << endl;
else
cout << vexs[i] << "到" << vexs[j] << "【不存在】长度为" << k << "路径" << endl;
return 0;
}