#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
using namespace std;
int main() {
freopen("Text.txt", "r", stdin);
int testCases;
cin >> testCases;
for (int t = 1; t <= testCases; t++) {
int n, m;
cin >> n >> m;
// Đọc ma trận tiếp xúc
vector<vector<int>> contact(n + 1, vector<int>(n + 1));
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
cin >> contact[i][j];
}
}
// Đọc danh sách F0
vector<int> f0List(m);
for (int i = 0; i < m; i++) {
cin >> f0List[i];
}
// Khởi tạo mảng để theo dõi trạng thái của mỗi người
// status[i] = 0: chưa nhiễm
// status[i] = 1: F0
// status[i] = 2: F1
// status[i] = 3: F2
vector<int> status(n + 1, 0);
// Đánh dấu F0
for (int i = 0; i < m; i++) {
status[f0List[i]] = 1;
}
// Xác định F1
for (int i = 1; i <= n; i++) {
if (status[i] == 0) {
for (int j = 0; j < m; j++) {
int f0Person = f0List[j];
if (contact[i][f0Person] == 1) {
status[i] = 2;
break;
}
}
}
}
// Xác định F2
for (int i = 1; i <= n; i++) {
if (status[i] == 0) {
for (int j = 1; j <= n; j++) {
if (status[j] == 2 && contact[i][j] == 1) {
status[i] = 3;
break;
}
}
}
}
// Đếm số lượng F1 F2
int countF1 = 0, countF2 = 0;
for (int i = 1; i <= n; i++) {
if (status[i] == 2) countF1++;
else if (status[i] == 3) countF2++;
}
cout << "#" << t << " " << countF1 << " " << countF2 << endl;
}
return 0;
}
I2RlZmluZSBfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUwojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDx2ZWN0b3I+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgoKaW50IG1haW4oKSB7CiAgICBmcmVvcGVuKCJUZXh0LnR4dCIsICJyIiwgc3RkaW4pOwogICAgaW50IHRlc3RDYXNlczsKICAgIGNpbiA+PiB0ZXN0Q2FzZXM7CgogICAgZm9yIChpbnQgdCA9IDE7IHQgPD0gdGVzdENhc2VzOyB0KyspIHsKICAgICAgICBpbnQgbiwgbTsKICAgICAgICBjaW4gPj4gbiA+PiBtOwoKICAgICAgICAvLyDEkOG7jWMgbWEgdHLhuq1uIHRp4bq/cCB4w7pjCiAgICAgICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiBjb250YWN0KG4gKyAxLCB2ZWN0b3I8aW50PihuICsgMSkpOwogICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewogICAgICAgICAgICBmb3IgKGludCBqID0gMTsgaiA8PSBuOyBqKyspIHsKICAgICAgICAgICAgICAgIGNpbiA+PiBjb250YWN0W2ldW2pdOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyDEkOG7jWMgZGFuaCBzw6FjaCBGMAogICAgICAgIHZlY3RvcjxpbnQ+IGYwTGlzdChtKTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG07IGkrKykgewogICAgICAgICAgICBjaW4gPj4gZjBMaXN0W2ldOwogICAgICAgIH0KCiAgICAgICAgLy8gS2jhu59pIHThuqFvIG3huqNuZyDEkeG7gyB0aGVvIGTDtWkgdHLhuqFuZyB0aMOhaSBj4bunYSBt4buXaSBuZ8aw4budaQogICAgICAgIC8vIHN0YXR1c1tpXSA9IDA6IGNoxrBhIG5oaeG7hW0KICAgICAgICAvLyBzdGF0dXNbaV0gPSAxOiBGMAogICAgICAgIC8vIHN0YXR1c1tpXSA9IDI6IEYxCiAgICAgICAgLy8gc3RhdHVzW2ldID0gMzogRjIKICAgICAgICB2ZWN0b3I8aW50PiBzdGF0dXMobiArIDEsIDApOwoKICAgICAgICAvLyDEkMOhbmggZOG6pXUgRjAKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG07IGkrKykgewogICAgICAgICAgICBzdGF0dXNbZjBMaXN0W2ldXSA9IDE7CiAgICAgICAgfQoKICAgICAgICAvLyBYw6FjIMSR4buLbmggRjEKICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKICAgICAgICAgICAgaWYgKHN0YXR1c1tpXSA9PSAwKSB7CiAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG07IGorKykgewogICAgICAgICAgICAgICAgICAgIGludCBmMFBlcnNvbiA9IGYwTGlzdFtqXTsKICAgICAgICAgICAgICAgICAgICBpZiAoY29udGFjdFtpXVtmMFBlcnNvbl0gPT0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNbaV0gPSAyOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIFjDoWMgxJHhu4tuaCBGMiAKICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKICAgICAgICAgICAgaWYgKHN0YXR1c1tpXSA9PSAwKSB7CiAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMTsgaiA8PSBuOyBqKyspIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzW2pdID09IDIgJiYgY29udGFjdFtpXVtqXSA9PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c1tpXSA9IDM7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gxJDhur9tIHPhu5EgbMaw4bujbmcgRjEgRjIKICAgICAgICBpbnQgY291bnRGMSA9IDAsIGNvdW50RjIgPSAwOwogICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewogICAgICAgICAgICBpZiAoc3RhdHVzW2ldID09IDIpIGNvdW50RjErKzsKICAgICAgICAgICAgZWxzZSBpZiAoc3RhdHVzW2ldID09IDMpIGNvdW50RjIrKzsKICAgICAgICB9CiAgICAgICAgY291dCA8PCAiIyIgPDwgdCA8PCAiICIgPDwgY291bnRGMSA8PCAiICIgPDwgY291bnRGMiA8PCBlbmRsOwogICAgfQoKICAgIHJldHVybiAwOwp9CgoK