#include using namespace std; using ll = long long; vector> used; vector> last; int len0 = 500; int len1 = 5; int cur; template T smax(T & x, T y) { if (x < y) { x = y; return true; } return false; } template T smin(T & x, T y) { if (x > y) { x = y; return true; } return false; } const ll LINF = 1e18; struct edge { int v, id; int t; bool used = false; bool type; edge() {} edge(int v, int id, int t, bool type): v(v), id(id), t(t), type(type) {} bool operator<(const edge &o) const{ if (t != o.t) { return t > o.t; } if (type != o.type) { return type < o.type; } if (used != o.used) { return used < o.used; } return id > o.id; } }; int date2int(string s) { int ans = 0; int d = -1; int h = -1; for (int i = 0; i < s.length(); ++i) { if (s[i] == 'd') { d = i; } if (s[i] == ':') { h = i; } } int days = 0; for (int i = 0; i < d; ++i) { days = 10 * days + s[i] - '0'; } int hours = 0; for (int i = d + 1; i < h; ++i) { hours = 10 * hours + s[i] - '0'; } int m = 0; for (int i = h + 1; i < s.length(); ++i) { m = 10 * m + s[i] - '0'; } return (days * 24 + hours) * 60 + m; } void solve() { int m; cin >> m; vector g(2 * m); map mp; for (int i = 0; i < m; ++i) { string from, time0, to, time1; cin >> from >> time0 >> to >> time1; if (mp.find(from) == mp.end()) { mp[from] = mp.size(); } int v0 = mp[from]; if (mp.find(to) == mp.end()) { mp[to] = mp.size(); } int v1 = mp[to]; int t0 = date2int(time0); int t1 = date2int(time1); // cout << v0 << " " << t0 << " " << v1 << " " << t1 << "\n"; g[2 * i] = edge(v0, i, t0, false); g[2 * i + 1] = edge(v1, i, t1, true); } int n = mp.size(); int len; cin >> len; vector root(len); for (int i = 0; i < len; ++i) { cin >> root[i]; --root[i]; g[2 * root[i]].used = true; } int f = g[2 * root[len - 1] + 1].v; int t0 = g[2 * root[len - 1] + 1].t; int ans = 0; sort(g.begin(), g.end()); vector dp(n, 1e9); vector finish(m, 1e9); for (auto e : g) { // cout << " " << e.v << " " << e.t << " " << f << " " << e.used << endl; if (e.v == f) { dp[f] = e.t; } if (e.type) { finish[e.id] = dp[e.v]; continue; } if (e.used) { smax(ans, dp[e.v]); } smin(dp[e.v], finish[e.id]); } if (ans == 1e9) { cout << "stranded\n"; } else { cout << max(0, ans - t0) << "\n"; } } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int t = 1; // cin >> t; while (t--) { solve(); } cerr << clock() * 1.0 / CLOCKS_PER_SEC << "\n"; return 0; }