#include<bits/stdc++.h>
using namespace std;
long long n,a[305],q;
long long mapp[605][605],dian_mapp[605][605];
void floyd()
{
for(int k=1;k<=n*2;k++)
{
for(int i=1;i<=n*2;i++)
{
for(int j=1;j<=n*2;j++)
{
if(mapp[i][j]>=mapp[i][k]+mapp[k][j])
{
mapp[i][j]=mapp[i][k]+mapp[k][j];
dian_mapp[i][j]=max(dian_mapp[i][k]+dian_mapp[k][j],dian_mapp[i][j]);
}
}
}
}
}
int main()
{
cin>>n;
for(int i=1;i<=602;i++)
{
for(int j=1;j<=602;j++)
{
if(i==j)
{
mapp[i][j]=0;
dian_mapp[i][j]=0;
}
else
{
mapp[i][j]=0x3f3f3f3f3f3f3f3f;
dian_mapp[i][j]=0;
}
}
}
for(int i=1;i<=n;i++)
{
cin>>a[i];
//dian_mapp[i][n+1]=a[i];
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
char ch;
cin>>ch;
if(ch=='Y')
{
dian_mapp[i][j]=a[i];
mapp[i][j]=1;
}
}
}
floyd();
cin>>q;
while(q--)
{
int x,y;
cin>>x>>y;
if(mapp[x][y]==0x3f3f3f3f3f3f3f3f)cout<<"Impossible\n";
else
{
cout<<mapp[x][y]<<" "<<dian_mapp[x][y]+a[y]<<"\n";
}
}
return 0;
}
AC 29个
WA 17个
样例过了,真的找不出问题了