// ~~ icebear ~~
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
typedef pair<int, ii> iii;
template<class T>
bool minimize(T &a, const T &b) {
if (a > b) return a = b, true;
return false;
}
template<class T>
bool maximize(T &a, const T &b) {
if (a < b) return a = b, true;
return false;
}
#define FOR(i,a,b) for(int i=(a); i<=(b); ++i)
#define FORR(i,a,b) for(int i=(a); i>=(b); --i)
#define REP(i, n) for(int i=0; i<(n); ++i)
#define RED(i, n) for(int i=(n)-1; i>=0; --i)
#define MASK(i) (1LL << (i))
#define BIT(S, i) (((S) >> (i)) & 1)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define all(x) x.begin(), x.end()
#define task "searoutes"
const int MOD = 1e9 + 7;
const int inf = 1e9 + 27092008;
const ll INF = 1e18 + 27092008;
const int N = 2e5 + 5;
int numNode, numEdge, numQuery;
vector<ii> G[N];
set<int> adj[N];
stack<int> st;
int num[N], low[N], timer, scc[N], numScc, vis[N];
void dfs(int u, int old_id, int T) {
vis[u] = T;
num[u] = low[u] = ++timer;
st.push(u);
for(ii x : G[u]) {
int v, i; tie(v, i) = x;
if (i == old_id) continue;
if (num[v]) minimize(low[u], num[v]);
else {
dfs(v, i, T);
minimize(low[u], low[v]);
}
}
if (num[u] == low[u]) {
numScc++;
int v;
do {
v = st.top(); st.pop();
scc[v] = numScc;
} while(v != u);
}
}
bool answer;
struct IT {
int sz;
vector<int> node, lazy;
IT(int n = 0): sz(n), node(4 * n + 5, 0), lazy(4 * n + 5, 0) {}
int combine(int x, int y) {
if (max(x, y) == inf) return inf;
if (x == y) return x;
if (x * y == 0) return (!x ? y : x);
return inf;
}
void pushDown(int id) {
if (lazy[id]) {
node[id << 1] = combine(node[id << 1], lazy[id]);
node[id << 1 | 1] = combine(node[id << 1 | 1], lazy[id]);
lazy[id << 1] = combine(lazy[id << 1], lazy[id]);
lazy[id << 1 | 1] = combine(lazy[id << 1 | 1], lazy[id]);
lazy[id] = 0;
}
}
void update(int id, int l, int r, int u, int v, int k) {
if (l > v || r < u) return;
if (u <= l && r <= v) {
node[id] = combine(node[id], k);
lazy[id] = combine(lazy[id], k);
return;
}
pushDown(id);
int mid = (l + r) >> 1;
update(id << 1, l, mid, u, v, k);
update(id << 1 | 1, mid + 1, r, u, v, k);
node[id] = combine(node[id << 1], node[id << 1 | 1]);
}
int getNode(int id, int l, int r, int u, int v) {
if (l > v || r < u) return 0;
if (u <= l && r <= v) return node[id];
pushDown(id);
int mid = (l + r) >> 1;
return combine(getNode(id << 1, l, mid, u, v), getNode(id << 1 | 1, mid + 1, r, u, v));
}
} it[N];
int head[N], par[N][20], h[N], len[N], pos[N], sz[N];
void hld(int u, int p, bool create_chain, bool is_head) {
if (!create_chain || p == -1) {
sz[u] = 1;
for(int v : adj[u]) if (v != p) {
par[v][0] = u;
h[v] = h[u] + 1;
hld(v, u, false, false);
sz[u] += sz[v];
}
}
if (create_chain == false) return;
head[u] = (is_head ? u : head[p]);
pos[u] = ++len[head[u]];
int hvy = 0;
for(int v : adj[u]) if (v != p && sz[v] > sz[hvy])
hvy = v;
for(int v : adj[u]) if (v != p)
hld(v, u, true, (v != hvy));
}
int LCA(int u, int v) {
if (h[u] < h[v]) swap(u, v);
int s = h[u] - h[v];
RED(j, 20) if (BIT(s, j))
u = par[u][j];
if (u == v) return u;
RED(j, 20) if (par[u][j] != par[v][j]) {
u = par[u][j];
v = par[v][j];
}
return par[u][0];
}
void modify(int u, int lca, int sign) {
while(head[u] != head[lca]) {
if (answer == false) return;
it[head[u]].update(1, 1, len[head[u]], 1, pos[u], sign);
u = par[head[u]][0];
}
if (u != lca) {
// cout << "CUR : " << u << ' ' << lca << ' ' << sign << ' ' << pos[lca] + 1 << ' ' << pos[u] << ' ' << head[u] << '\n';
it[head[u]].update(1, 1, len[head[u]], pos[lca] + 1, pos[u], sign);
}
}
void check(int u, int lca) {
while(head[u] != head[lca]) {
if (answer == false) return;
if (it[head[u]].getNode(1, 1, len[head[u]], 1, pos[u]) == inf)
answer = false;
u = par[head[u]][0];
}
if (u != lca && it[head[u]].getNode(1, 1, len[head[u]], pos[lca] + 1, pos[u]) == inf)
answer = false;
}
void init(void) {
cin >> numNode >> numEdge >> numQuery;
FOR(i, 1, numEdge) {
int u, v;
cin >> u >> v;
G[u].pb(mp(v, i));
G[v].pb(mp(u, i));
}
int cnt = 0;
FOR(i, 1, numNode) if (!num[i])
dfs(i, -1, ++cnt);
}
void process(void) {
FOR(i, 1, numNode) for(ii v : G[i])
if (scc[i] != scc[v.fi])
adj[scc[i]].insert(scc[v.fi]);
FOR(i, 1, numScc) if (!pos[i])
hld(i, -1, true, true);
FOR(j, 1, 19) FOR(i, 1, numScc)
par[i][j] = par[par[i][j - 1]][j - 1];
FOR(i, 1, numScc) if (i == head[i])
it[i] = IT(len[i]);
answer = true;
// cout << "DEBUG SCC : "; FOR(i, 1, numNode) cout << scc[i] << ' '; cout << '\n';
FOR(i, 1, numQuery) {
int u, v;
cin >> u >> v;
if (vis[u] != vis[v]) answer = false;
if (!answer) continue;
u = scc[u]; v = scc[v];
if (u == v) continue;
int p = LCA(u, v);
// cout << "UPDATE : " << u << ' ' << p << ' ' << -1 << '\n';
// cout << "UPDATE : " << v << ' ' << p << ' ' << +1 << '\n';
modify(u, p, -1);
modify(v, p, +1);
check(u, p);
check(v, p);
}
cout << (answer ? "Yes\n" : "No\n");
}
void reset() {
FOR(i, 1, numNode) {
G[i].clear();
adj[i].clear();
num[i] = low[i] = 0;
sz[i] = pos[i] = head[i] = len[i] = h[i] = vis[i] = 0;
it[i].node.clear();
it[i].lazy.clear();
}
numScc = timer = 0;
st = stack<int>();
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
if (fopen(task".inp", "r")) {
freopen(task".inp", "r", stdin);
freopen(task".out", "w", stdout);
}
int tc = 1;
cin >> tc;
while(tc--) {
init();
process();
reset();
}
return 0;
}
Ly8gfn4gaWNlYmVhciB+fgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IGlpOwp0eXBlZGVmIHBhaXI8aW50LCBpaT4gaWlpOwoKdGVtcGxhdGU8Y2xhc3MgVD4KICAgIGJvb2wgbWluaW1pemUoVCAmYSwgY29uc3QgVCAmYikgewogICAgICAgIGlmIChhID4gYikgcmV0dXJuIGEgPSBiLCB0cnVlOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCnRlbXBsYXRlPGNsYXNzIFQ+CiAgICBib29sIG1heGltaXplKFQgJmEsIGNvbnN0IFQgJmIpIHsKICAgICAgICBpZiAoYSA8IGIpIHJldHVybiBhID0gYiwgdHJ1ZTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgojZGVmaW5lIEZPUihpLGEsYikgZm9yKGludCBpPShhKTsgaTw9KGIpOyArK2kpCiNkZWZpbmUgRk9SUihpLGEsYikgZm9yKGludCBpPShhKTsgaT49KGIpOyAtLWkpCiNkZWZpbmUgUkVQKGksIG4pIGZvcihpbnQgaT0wOyBpPChuKTsgKytpKQojZGVmaW5lIFJFRChpLCBuKSBmb3IoaW50IGk9KG4pLTE7IGk+PTA7IC0taSkKI2RlZmluZSBNQVNLKGkpICgxTEwgPDwgKGkpKQojZGVmaW5lIEJJVChTLCBpKSAoKChTKSA+PiAoaSkpICYgMSkKI2RlZmluZSBtcCBtYWtlX3BhaXIKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIGFsbCh4KSB4LmJlZ2luKCksIHguZW5kKCkKI2RlZmluZSB0YXNrICJzZWFyb3V0ZXMiCgpjb25zdCBpbnQgTU9EID0gMWU5ICsgNzsKY29uc3QgaW50IGluZiA9IDFlOSArIDI3MDkyMDA4Owpjb25zdCBsbCBJTkYgPSAxZTE4ICsgMjcwOTIwMDg7CmNvbnN0IGludCBOID0gMmU1ICsgNTsKaW50IG51bU5vZGUsIG51bUVkZ2UsIG51bVF1ZXJ5Owp2ZWN0b3I8aWk+IEdbTl07CnNldDxpbnQ+IGFkaltOXTsKc3RhY2s8aW50PiBzdDsKaW50IG51bVtOXSwgbG93W05dLCB0aW1lciwgc2NjW05dLCBudW1TY2MsIHZpc1tOXTsKCnZvaWQgZGZzKGludCB1LCBpbnQgb2xkX2lkLCBpbnQgVCkgewogICAgdmlzW3VdID0gVDsKICAgIG51bVt1XSA9IGxvd1t1XSA9ICsrdGltZXI7CiAgICBzdC5wdXNoKHUpOwogICAgZm9yKGlpIHggOiBHW3VdKSB7CiAgICAgICAgaW50IHYsIGk7IHRpZSh2LCBpKSA9IHg7CiAgICAgICAgaWYgKGkgPT0gb2xkX2lkKSBjb250aW51ZTsKICAgICAgICBpZiAobnVtW3ZdKSBtaW5pbWl6ZShsb3dbdV0sIG51bVt2XSk7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGRmcyh2LCBpLCBUKTsKICAgICAgICAgICAgbWluaW1pemUobG93W3VdLCBsb3dbdl0pOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAobnVtW3VdID09IGxvd1t1XSkgewogICAgICAgIG51bVNjYysrOwogICAgICAgIGludCB2OwogICAgICAgIGRvIHsKICAgICAgICAgICAgdiA9IHN0LnRvcCgpOyBzdC5wb3AoKTsKICAgICAgICAgICAgc2NjW3ZdID0gbnVtU2NjOwogICAgICAgIH0gd2hpbGUodiAhPSB1KTsKICAgIH0KfQoKYm9vbCBhbnN3ZXI7CnN0cnVjdCBJVCB7CiAgICBpbnQgc3o7CiAgICB2ZWN0b3I8aW50PiBub2RlLCBsYXp5OwogICAgSVQoaW50IG4gPSAwKTogc3oobiksIG5vZGUoNCAqIG4gKyA1LCAwKSwgbGF6eSg0ICogbiArIDUsIDApIHt9CgogICAgaW50IGNvbWJpbmUoaW50IHgsIGludCB5KSB7CiAgICAgICAgaWYgKG1heCh4LCB5KSA9PSBpbmYpIHJldHVybiBpbmY7CiAgICAgICAgaWYgKHggPT0geSkgcmV0dXJuIHg7CiAgICAgICAgaWYgKHggKiB5ID09IDApIHJldHVybiAoIXggPyB5IDogeCk7CiAgICAgICAgcmV0dXJuIGluZjsKICAgIH0KCiAgICB2b2lkIHB1c2hEb3duKGludCBpZCkgewogICAgICAgIGlmIChsYXp5W2lkXSkgewogICAgICAgICAgICBub2RlW2lkIDw8IDFdID0gY29tYmluZShub2RlW2lkIDw8IDFdLCBsYXp5W2lkXSk7CiAgICAgICAgICAgIG5vZGVbaWQgPDwgMSB8IDFdID0gY29tYmluZShub2RlW2lkIDw8IDEgfCAxXSwgbGF6eVtpZF0pOwogICAgICAgICAgICBsYXp5W2lkIDw8IDFdID0gY29tYmluZShsYXp5W2lkIDw8IDFdLCBsYXp5W2lkXSk7CiAgICAgICAgICAgIGxhenlbaWQgPDwgMSB8IDFdID0gY29tYmluZShsYXp5W2lkIDw8IDEgfCAxXSwgbGF6eVtpZF0pOwogICAgICAgICAgICBsYXp5W2lkXSA9IDA7CiAgICAgICAgfQogICAgfQoKICAgIHZvaWQgdXBkYXRlKGludCBpZCwgaW50IGwsIGludCByLCBpbnQgdSwgaW50IHYsIGludCBrKSB7CiAgICAgICAgaWYgKGwgPiB2IHx8IHIgPCB1KSByZXR1cm47CiAgICAgICAgaWYgKHUgPD0gbCAmJiByIDw9IHYpIHsKICAgICAgICAgICAgbm9kZVtpZF0gPSBjb21iaW5lKG5vZGVbaWRdLCBrKTsKICAgICAgICAgICAgbGF6eVtpZF0gPSBjb21iaW5lKGxhenlbaWRdLCBrKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBwdXNoRG93bihpZCk7CiAgICAgICAgaW50IG1pZCA9IChsICsgcikgPj4gMTsKICAgICAgICB1cGRhdGUoaWQgPDwgMSwgbCwgbWlkLCB1LCB2LCBrKTsKICAgICAgICB1cGRhdGUoaWQgPDwgMSB8IDEsIG1pZCArIDEsIHIsIHUsIHYsIGspOwogICAgICAgIG5vZGVbaWRdID0gY29tYmluZShub2RlW2lkIDw8IDFdLCBub2RlW2lkIDw8IDEgfCAxXSk7CiAgICB9CgogICAgaW50IGdldE5vZGUoaW50IGlkLCBpbnQgbCwgaW50IHIsIGludCB1LCBpbnQgdikgewogICAgICAgIGlmIChsID4gdiB8fCByIDwgdSkgcmV0dXJuIDA7CiAgICAgICAgaWYgKHUgPD0gbCAmJiByIDw9IHYpIHJldHVybiBub2RlW2lkXTsKICAgICAgICBwdXNoRG93bihpZCk7CiAgICAgICAgaW50IG1pZCA9IChsICsgcikgPj4gMTsKICAgICAgICByZXR1cm4gY29tYmluZShnZXROb2RlKGlkIDw8IDEsIGwsIG1pZCwgdSwgdiksIGdldE5vZGUoaWQgPDwgMSB8IDEsIG1pZCArIDEsIHIsIHUsIHYpKTsKICAgIH0KfSBpdFtOXTsKCmludCBoZWFkW05dLCBwYXJbTl1bMjBdLCBoW05dLCBsZW5bTl0sIHBvc1tOXSwgc3pbTl07Cgp2b2lkIGhsZChpbnQgdSwgaW50IHAsIGJvb2wgY3JlYXRlX2NoYWluLCBib29sIGlzX2hlYWQpIHsKICAgIGlmICghY3JlYXRlX2NoYWluIHx8IHAgPT0gLTEpIHsKICAgICAgICBzelt1XSA9IDE7CiAgICAgICAgZm9yKGludCB2IDogYWRqW3VdKSBpZiAodiAhPSBwKSB7CiAgICAgICAgICAgIHBhclt2XVswXSA9IHU7CiAgICAgICAgICAgIGhbdl0gPSBoW3VdICsgMTsKICAgICAgICAgICAgaGxkKHYsIHUsIGZhbHNlLCBmYWxzZSk7CiAgICAgICAgICAgIHN6W3VdICs9IHN6W3ZdOwogICAgICAgIH0KICAgIH0KICAgIGlmIChjcmVhdGVfY2hhaW4gPT0gZmFsc2UpIHJldHVybjsKICAgIGhlYWRbdV0gPSAoaXNfaGVhZCA/IHUgOiBoZWFkW3BdKTsKICAgIHBvc1t1XSA9ICsrbGVuW2hlYWRbdV1dOwogICAgaW50IGh2eSA9IDA7CiAgICBmb3IoaW50IHYgOiBhZGpbdV0pIGlmICh2ICE9IHAgJiYgc3pbdl0gPiBzeltodnldKQogICAgICAgIGh2eSA9IHY7CiAgICBmb3IoaW50IHYgOiBhZGpbdV0pIGlmICh2ICE9IHApCiAgICAgICAgaGxkKHYsIHUsIHRydWUsICh2ICE9IGh2eSkpOwp9CgppbnQgTENBKGludCB1LCBpbnQgdikgewogICAgaWYgKGhbdV0gPCBoW3ZdKSBzd2FwKHUsIHYpOwogICAgaW50IHMgPSBoW3VdIC0gaFt2XTsKICAgIFJFRChqLCAyMCkgaWYgKEJJVChzLCBqKSkKICAgICAgICB1ID0gcGFyW3VdW2pdOwogICAgaWYgKHUgPT0gdikgcmV0dXJuIHU7CiAgICBSRUQoaiwgMjApIGlmIChwYXJbdV1bal0gIT0gcGFyW3ZdW2pdKSB7CiAgICAgICAgdSA9IHBhclt1XVtqXTsKICAgICAgICB2ID0gcGFyW3ZdW2pdOwogICAgfQogICAgcmV0dXJuIHBhclt1XVswXTsKfQoKdm9pZCBtb2RpZnkoaW50IHUsIGludCBsY2EsIGludCBzaWduKSB7CiAgICB3aGlsZShoZWFkW3VdICE9IGhlYWRbbGNhXSkgewogICAgICAgIGlmIChhbnN3ZXIgPT0gZmFsc2UpIHJldHVybjsKICAgICAgICBpdFtoZWFkW3VdXS51cGRhdGUoMSwgMSwgbGVuW2hlYWRbdV1dLCAxLCBwb3NbdV0sIHNpZ24pOwogICAgICAgIHUgPSBwYXJbaGVhZFt1XV1bMF07CiAgICB9CgogICAgaWYgKHUgIT0gbGNhKSB7Ci8vICAgICAgICBjb3V0IDw8ICJDVVIgOiAiIDw8IHUgPDwgJyAnIDw8IGxjYSA8PCAnICcgPDwgc2lnbiA8PCAnICcgPDwgcG9zW2xjYV0gKyAxIDw8ICcgJyA8PCBwb3NbdV0gPDwgJyAnIDw8IGhlYWRbdV0gPDwgJ1xuJzsKICAgICAgICBpdFtoZWFkW3VdXS51cGRhdGUoMSwgMSwgbGVuW2hlYWRbdV1dLCBwb3NbbGNhXSArIDEsIHBvc1t1XSwgc2lnbik7CiAgICB9Cn0KCnZvaWQgY2hlY2soaW50IHUsIGludCBsY2EpIHsKICAgIHdoaWxlKGhlYWRbdV0gIT0gaGVhZFtsY2FdKSB7CiAgICAgICAgaWYgKGFuc3dlciA9PSBmYWxzZSkgcmV0dXJuOwogICAgICAgIGlmIChpdFtoZWFkW3VdXS5nZXROb2RlKDEsIDEsIGxlbltoZWFkW3VdXSwgMSwgcG9zW3VdKSA9PSBpbmYpCiAgICAgICAgICAgIGFuc3dlciA9IGZhbHNlOwogICAgICAgIHUgPSBwYXJbaGVhZFt1XV1bMF07CiAgICB9CiAgICBpZiAodSAhPSBsY2EgJiYgaXRbaGVhZFt1XV0uZ2V0Tm9kZSgxLCAxLCBsZW5baGVhZFt1XV0sIHBvc1tsY2FdICsgMSwgcG9zW3VdKSA9PSBpbmYpCiAgICAgICAgYW5zd2VyID0gZmFsc2U7Cn0KCnZvaWQgaW5pdCh2b2lkKSB7CiAgICBjaW4gPj4gbnVtTm9kZSA+PiBudW1FZGdlID4+IG51bVF1ZXJ5OwogICAgRk9SKGksIDEsIG51bUVkZ2UpIHsKICAgICAgICBpbnQgdSwgdjsKICAgICAgICBjaW4gPj4gdSA+PiB2OwogICAgICAgIEdbdV0ucGIobXAodiwgaSkpOwogICAgICAgIEdbdl0ucGIobXAodSwgaSkpOwogICAgfQoKICAgIGludCBjbnQgPSAwOwogICAgRk9SKGksIDEsIG51bU5vZGUpIGlmICghbnVtW2ldKQogICAgICAgIGRmcyhpLCAtMSwgKytjbnQpOwp9Cgp2b2lkIHByb2Nlc3Modm9pZCkgewogICAgRk9SKGksIDEsIG51bU5vZGUpIGZvcihpaSB2IDogR1tpXSkKICAgICAgICBpZiAoc2NjW2ldICE9IHNjY1t2LmZpXSkKICAgICAgICAgICAgYWRqW3NjY1tpXV0uaW5zZXJ0KHNjY1t2LmZpXSk7CiAgICBGT1IoaSwgMSwgbnVtU2NjKSBpZiAoIXBvc1tpXSkKICAgICAgICBobGQoaSwgLTEsIHRydWUsIHRydWUpOwogICAgRk9SKGosIDEsIDE5KSBGT1IoaSwgMSwgbnVtU2NjKQogICAgICAgIHBhcltpXVtqXSA9IHBhcltwYXJbaV1baiAtIDFdXVtqIC0gMV07CgogICAgRk9SKGksIDEsIG51bVNjYykgaWYgKGkgPT0gaGVhZFtpXSkKICAgICAgICBpdFtpXSA9IElUKGxlbltpXSk7CiAgICBhbnN3ZXIgPSB0cnVlOwovLyAgICBjb3V0IDw8ICJERUJVRyBTQ0MgOiAiOyBGT1IoaSwgMSwgbnVtTm9kZSkgY291dCA8PCBzY2NbaV0gPDwgJyAnOyBjb3V0IDw8ICdcbic7CgogICAgRk9SKGksIDEsIG51bVF1ZXJ5KSB7CiAgICAgICAgaW50IHUsIHY7CiAgICAgICAgY2luID4+IHUgPj4gdjsKICAgICAgICBpZiAodmlzW3VdICE9IHZpc1t2XSkgYW5zd2VyID0gZmFsc2U7CiAgICAgICAgaWYgKCFhbnN3ZXIpIGNvbnRpbnVlOwogICAgICAgIHUgPSBzY2NbdV07IHYgPSBzY2Nbdl07CiAgICAgICAgaWYgKHUgPT0gdikgY29udGludWU7CiAgICAgICAgaW50IHAgPSBMQ0EodSwgdik7Ci8vICAgICAgICBjb3V0IDw8ICJVUERBVEUgOiAiIDw8IHUgPDwgJyAnIDw8IHAgPDwgJyAnIDw8IC0xIDw8ICdcbic7Ci8vICAgICAgICBjb3V0IDw8ICJVUERBVEUgOiAiIDw8IHYgPDwgJyAnIDw8IHAgPDwgJyAnIDw8ICsxIDw8ICdcbic7CiAgICAgICAgbW9kaWZ5KHUsIHAsIC0xKTsKICAgICAgICBtb2RpZnkodiwgcCwgKzEpOwogICAgICAgIGNoZWNrKHUsIHApOwogICAgICAgIGNoZWNrKHYsIHApOwogICAgfQogICAgY291dCA8PCAoYW5zd2VyID8gIlllc1xuIiA6ICJOb1xuIik7Cn0KCnZvaWQgcmVzZXQoKSB7CiAgICBGT1IoaSwgMSwgbnVtTm9kZSkgewogICAgICAgIEdbaV0uY2xlYXIoKTsKICAgICAgICBhZGpbaV0uY2xlYXIoKTsKICAgICAgICBudW1baV0gPSBsb3dbaV0gPSAwOwogICAgICAgIHN6W2ldID0gcG9zW2ldID0gaGVhZFtpXSA9IGxlbltpXSA9IGhbaV0gPSB2aXNbaV0gPSAwOwogICAgICAgIGl0W2ldLm5vZGUuY2xlYXIoKTsKICAgICAgICBpdFtpXS5sYXp5LmNsZWFyKCk7CiAgICB9CiAgICBudW1TY2MgPSB0aW1lciA9IDA7CiAgICBzdCA9IHN0YWNrPGludD4oKTsKfQoKaW50IG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiAgICBpZiAoZm9wZW4odGFzayIuaW5wIiwgInIiKSkgewogICAgICAgIGZyZW9wZW4odGFzayIuaW5wIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3Blbih0YXNrIi5vdXQiLCAidyIsIHN0ZG91dCk7CiAgICB9CiAgICBpbnQgdGMgPSAxOwogICAgY2luID4+IHRjOwogICAgd2hpbGUodGMtLSkgewogICAgICAgIGluaXQoKTsKICAgICAgICBwcm9jZXNzKCk7CiAgICAgICAgcmVzZXQoKTsKICAgIH0KICAgIHJldHVybiAwOwp9Cgo=