#abc286e. [abc286_e]Souvenir

[abc286_e]Souvenir

题目描述

从前有 nn 座岛,每个岛上有 aia_i 个金币,各个岛间有若干条单向航线相连。

你从某个岛开始旅行,经过一个岛(包括最开始所在的岛)就会拿走上面的金币。

现在问你 qq 个问题:从岛 uiu_i 旅行到岛 viv_i,最少要走几条航线,以及恰好走这么多条航线最多能获得多少金币。如果根本无法到达 viv_i,输出 Impossible

询问之间相互独立。

输入格式

输入第一行一个整数 nn 表示岛的数量。

接下来一行 nn 个整数表示每个岛上的金币数。

接下来 nn 行每行一个长为 nn 的字符串,第 ii 行字符串的第 jj 个字符若为 Y 则表示岛 iijj 间有单向航线,否则表示没有。

接下来一行一个整数 qq 表示询问次数。

最后 qq 行每行两个整数 ui,viu_i,v_i,询问你从岛 uiu_i 旅行到岛 viv_i 最少要走几条航线,以及恰好走这么多条航线最多能获得多少金币。

输出格式

对于每个询问输出一行:

  • uiu_i 不能到达 viv_i,输出 Impossible
  • 否则,输出从岛 uiu_i 旅行到岛 viv_i 最少要走几条航线,以及恰好走这么多条航线最多能获得多少金币。

样例解释 1

这些岛的结构如下:

  • 对于第 11 个询问,因为岛 11 有一条航线通往岛 33,显然最少航线为 11 条,此时能拿到岛 11 和岛 33 上的金币共 30+70=10030+70=100 个。
  • 对于第 22 个询问,可以证明最少航线为 22 条,有两种方案 3413 \rarr 4 \rarr 13513 \rarr 5 \rarr 1,总金币分别为 70+20+30=12070+20+30=12070+60+30=16070+60+30=160,故最多金币为 160160
  • 对于第 33 个询问,只有一种方案 41354 \rarr 1 \rarr 3 \rarr 5 可以使航线数最少为 33,所得金币为 20+30+70+60=18020+30+70+60=180

样例解释 2

笑死,连航线都没有。

数据范围与约定

对于 100%100\% 的数据,$2\le n\le 300,1\le a_i\le 10^9,1\le q\le n(n-1),1\le u_i,v_i\le n$,且询问中的 ui,viu_i,v_i 各不相同。

翻译者:not_Rick_Astley