#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
// template {{{
#define pb push_back
#define eb emplace_back
#define mp make_pair
#define mt make_tuple
#define lb lower_bound
#define ub upper_bound
#define resz resize
#define deb(x) cout<<#x<<" "<<x<<endl
#define f first
#define s second
#define u_s unordered_set
#define u_m unordered_map
#define p_q priority_queue
#define sz(x) int((x).size())
#define all(x) (x).begin(), (x).end()
#define FOR(i, a, b) for (int i = (a); i < (b); i++)
#define F0R(i, a) for (int i = 0; i < (a); i++)
#define FORd(i, a, b) for (int i = (b)-1; i >= (a); i--)
#define F0Rd(i, a) for (int i = (a)-1; i >= 0; i--)
#define trav(a, x) for (auto& a : x)
#define sort_by(x, y) sort(all(x), [&](const auto& a, const auto& b) { return y; })
typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;
using ll = long long;
using vi = vector<int>;
using vvi = vector<vi>;
using vll = vector<ll>;
using vvll = vector<vll>;
using vb = vector<bool>;
using vd = vector<double>;
using vs = vector<string>;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
using pdd = pair<double, double>;
using vpii = vector<pii>;
using vpll = vector<pll>;
using vpdd = vector<pdd>;
template<typename T> void ckmin(T& a, const T& b) { a = min(a, b); }
template<typename T> void ckmax(T& a, const T& b) { a = max(a, b); }
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
namespace __input {
template<class T1, class T2> void re(pair<T1,T2>& p);
template<class T> void re(vector<T>& a);
template<class T, size_t SZ> void re(array<T,SZ>& a);
template<class T> void re(T& x) { cin >> x; }
void re(double& x) { string t; re(t); x = stod(t); }
template<class Arg, class... Args> void re(Arg& first, Args&... rest) {
re(first); re(rest...);
}
template<class T1, class T2> void re(pair<T1,T2>& p) { re(p.f,p.s); }
template<class T> void re(vector<T>& a) { F0R(i,sz(a)) re(a[i]); }
template<class T, size_t SZ> void re(array<T,SZ>& a) { F0R(i,SZ) re(a[i]); }
}
using namespace __input;
namespace __output {
template<class T1, class T2> void pr(const pair<T1,T2>& x);
template<class T, size_t SZ> void pr(const array<T,SZ>& x);
template<class T> void pr(const vector<T>& x);
template<class T> void pr(const set<T>& x);
template<class T1, class T2> void pr(const map<T1,T2>& x);
template<class T> void pr(const T& x) { cout << x; }
template<class Arg, class... Args> void pr(const Arg& first, const Args&... rest) {
pr(first); pr(rest...);
}
template<class T1, class T2> void pr(const pair<T1,T2>& x) {
pr("{",x.f,", ",x.s,"}");
}
template<class T, bool pretty = true> void prContain(const T& x) {
if (pretty) pr("{");
bool fst = 1; for (const auto& a: x) pr(!fst?pretty?", ":" ":"",a), fst = 0;
if (pretty) pr("}");
}
template<class T> void pc(const T& x) { prContain<T, false>(x); pr("\n"); }
template<class T, size_t SZ> void pr(const array<T,SZ>& x) { prContain(x); }
template<class T> void pr(const vector<T>& x) { prContain(x); }
template<class T> void pr(const set<T>& x) { prContain(x); }
template<class T1, class T2> void pr(const map<T1,T2>& x) { prContain(x); }
void ps() { pr("\n"); }
template<class Arg> void ps(const Arg& first) {
pr(first); ps();
}
template<class Arg, class... Args> void ps(const Arg& first, const Args&... rest) {
pr(first," "); ps(rest...);
}
}
using namespace __output;
#define TRACE(x) x
#define __pn(x) pr(#x, " = ")
#define pd(...) __pn((__VA_ARGS__)), ps(__VA_ARGS__), cout << flush
namespace __algorithm {
template<typename T> void dedup(vector<T>& v) {
sort(all(v)); v.erase(unique(all(v)), v.end());
}
template<typename T> typename vector<T>::const_iterator find(const vector<T>& v, const T& x) {
auto it = lower_bound(all(v), x); return it != v.end() && *it == x ? it : v.end();
}
template<typename T> size_t index(const vector<T>& v, const T& x) {
auto it = find(v, x); assert(it != v.end() && *it == x); return it - v.begin();
}
template<typename T1, typename T2> typename vector<pair<T1, T2>>::iterator lower_bound(
const vector<pair<T1, T2>>& v, const T1& x) {
return lower_bound(all(v), x, [](pair<T1, T2> a, pair<T1, T2> b) { return a.f < b.f; });
}
template<typename T1, typename T2> typename vector<pair<T1, T2>>::iterator upper_bound(
const vector<pair<T1, T2>>& v, const T1& x) {
return upper_bound(all(v), x, [](pair<T1, T2> a, pair<T1, T2> b) { return a.f < b.f; });
}
template<typename T> T POW(T b, T p){
T Ans = 1;
while(p){if(p&1) Ans=(Ans*b); b*=b, p>>=1;} return Ans;}
}
using namespace __algorithm;
struct __monostate {
friend istream& operator>>(istream& is, const __attribute__((unused))__monostate& ms) { return is; }
friend ostream& operator<<(ostream& os, const __attribute__((unused))__monostate& ms) { return os; }
} ms;
namespace __io {
void setIn(string s) { freopen(s.c_str(),"r",stdin); }
void setOut(string s) { freopen(s.c_str(),"w",stdout); }
void setIO(string s = "") {
ios_base::sync_with_stdio(0); cin.tie(0);
cout << setprecision(15);
if (sz(s)) { setIn(s+".in"), setOut(s+".out"); }
}
}
using namespace __io;
// }}}
// AUTHOR:DaddyCool__69
const int N = 2e5+1;
int t, n, m, k, a1, b1;
vi sol, ans;
bool visited[N], rt[N];
vi g[N];
void dfs(int u)
{
sol.pb(u);
visited[u] = 1;
for(auto v:g[u])
{
if(visited[v] || !rt[v])
continue;
dfs(v);
}
}
int main()
{
ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
re(t);
while(t--)
{
ans.clear();
sol.clear();
re(n, m);
vi a(n+1), b(n+1);
FOR(i, 1, n+1)
re(a[i]);
FOR(i, 1, n+1)
{
g[i].clear();
re(b[i]);
visited[i] = 0;
rt[i] = 0;
//cout<<rt[i]<<" ";
}
a1 = a[1];
b1 = b[1];
FOR(i, 2, n+1)
if(a[i]*b1>b[i]*a1)
a1 = a[i], b1 = b[i];
FOR(i, 0, m)
{
int u, v;
re(u, v);
g[u].pb(v);
g[v].pb(u);
}
FOR(i, 1, n+1)
{
if(a[i]*b1==b[i]*a1)
rt[i] = 1;
else
rt[i] = 0;
}
for(int i = n; i>=1; i--)
{
if(!visited[i] && rt[i])
{
sol.clear();
dfs(i);
if(sz(sol)>sz(ans))
ans = sol;
}
}
ps(sz(ans));
for(int x:ans)
cout<<x<<" ";
cout<<endl;
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlIDxleHQvcGJfZHMvYXNzb2NfY29udGFpbmVyLmhwcD4KI2luY2x1ZGUgPGV4dC9wYl9kcy90cmVlX3BvbGljeS5ocHA+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIG5hbWVzcGFjZSBfX2dudV9wYmRzOwogCi8vIHRlbXBsYXRlIHt7ewojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIGViIGVtcGxhY2VfYmFjawojZGVmaW5lIG1wIG1ha2VfcGFpcgojZGVmaW5lIG10IG1ha2VfdHVwbGUKI2RlZmluZSBsYiBsb3dlcl9ib3VuZAojZGVmaW5lIHViIHVwcGVyX2JvdW5kCiNkZWZpbmUgcmVzeiByZXNpemUKI2RlZmluZSBkZWIoeCkgY291dDw8I3g8PCIgIjw8eDw8ZW5kbAojZGVmaW5lIGYgZmlyc3QKI2RlZmluZSBzIHNlY29uZAojZGVmaW5lIHVfcyB1bm9yZGVyZWRfc2V0CiNkZWZpbmUgdV9tIHVub3JkZXJlZF9tYXAKI2RlZmluZSBwX3EgcHJpb3JpdHlfcXVldWUKIAojZGVmaW5lIHN6KHgpIGludCgoeCkuc2l6ZSgpKQojZGVmaW5lIGFsbCh4KSAoeCkuYmVnaW4oKSwgKHgpLmVuZCgpCiAKI2RlZmluZSBGT1IoaSwgYSwgYikgZm9yIChpbnQgaSA9IChhKTsgaSA8IChiKTsgaSsrKQojZGVmaW5lIEYwUihpLCBhKSBmb3IgKGludCBpID0gMDsgaSA8IChhKTsgaSsrKQojZGVmaW5lIEZPUmQoaSwgYSwgYikgZm9yIChpbnQgaSA9IChiKS0xOyBpID49IChhKTsgaS0tKQojZGVmaW5lIEYwUmQoaSwgYSkgZm9yIChpbnQgaSA9IChhKS0xOyBpID49IDA7IGktLSkKI2RlZmluZSB0cmF2KGEsIHgpIGZvciAoYXV0byYgYSA6IHgpCiAKI2RlZmluZSBzb3J0X2J5KHgsIHkpIHNvcnQoYWxsKHgpLCBbJl0oY29uc3QgYXV0byYgYSwgY29uc3QgYXV0byYgYikgeyByZXR1cm4geTsgfSkKCnR5cGVkZWYgdHJlZTxpbnQsIG51bGxfdHlwZSwgbGVzczxpbnQ+LCByYl90cmVlX3RhZywgdHJlZV9vcmRlcl9zdGF0aXN0aWNzX25vZGVfdXBkYXRlPiBvcmRlcmVkX3NldDsKIAp1c2luZyBsbCA9IGxvbmcgbG9uZzsKdXNpbmcgdmkgPSB2ZWN0b3I8aW50PjsKdXNpbmcgdnZpID0gdmVjdG9yPHZpPjsKdXNpbmcgdmxsID0gdmVjdG9yPGxsPjsKdXNpbmcgdnZsbCA9IHZlY3Rvcjx2bGw+Owp1c2luZyB2YiA9IHZlY3Rvcjxib29sPjsKdXNpbmcgdmQgPSB2ZWN0b3I8ZG91YmxlPjsKdXNpbmcgdnMgPSB2ZWN0b3I8c3RyaW5nPjsKIAp1c2luZyBwaWkgPSBwYWlyPGludCwgaW50PjsKdXNpbmcgcGxsID0gcGFpcjxsbCwgbGw+Owp1c2luZyBwZGQgPSBwYWlyPGRvdWJsZSwgZG91YmxlPjsKIAp1c2luZyB2cGlpID0gdmVjdG9yPHBpaT47CnVzaW5nIHZwbGwgPSB2ZWN0b3I8cGxsPjsKdXNpbmcgdnBkZCA9IHZlY3RvcjxwZGQ+OwogCnRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgY2ttaW4oVCYgYSwgY29uc3QgVCYgYikgeyBhID0gbWluKGEsIGIpOyB9CnRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgY2ttYXgoVCYgYSwgY29uc3QgVCYgYikgeyBhID0gbWF4KGEsIGIpOyB9CiAKbXQxOTkzN182NCBybmcoY2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpLnRpbWVfc2luY2VfZXBvY2goKS5jb3VudCgpKTsKIApuYW1lc3BhY2UgX19pbnB1dCB7CiAgICB0ZW1wbGF0ZTxjbGFzcyBUMSwgY2xhc3MgVDI+IHZvaWQgcmUocGFpcjxUMSxUMj4mIHApOwogICAgdGVtcGxhdGU8Y2xhc3MgVD4gdm9pZCByZSh2ZWN0b3I8VD4mIGEpOwogICAgdGVtcGxhdGU8Y2xhc3MgVCwgc2l6ZV90IFNaPiB2b2lkIHJlKGFycmF5PFQsU1o+JiBhKTsKIAogICAgdGVtcGxhdGU8Y2xhc3MgVD4gdm9pZCByZShUJiB4KSB7IGNpbiA+PiB4OyB9CiAgICB2b2lkIHJlKGRvdWJsZSYgeCkgeyBzdHJpbmcgdDsgcmUodCk7IHggPSBzdG9kKHQpOyB9CiAgICB0ZW1wbGF0ZTxjbGFzcyBBcmcsIGNsYXNzLi4uIEFyZ3M+IHZvaWQgcmUoQXJnJiBmaXJzdCwgQXJncyYuLi4gcmVzdCkgewogICAgICAgIHJlKGZpcnN0KTsgcmUocmVzdC4uLik7CiAgICB9CiAKICAgIHRlbXBsYXRlPGNsYXNzIFQxLCBjbGFzcyBUMj4gdm9pZCByZShwYWlyPFQxLFQyPiYgcCkgeyByZShwLmYscC5zKTsgfQogICAgdGVtcGxhdGU8Y2xhc3MgVD4gdm9pZCByZSh2ZWN0b3I8VD4mIGEpIHsgRjBSKGksc3ooYSkpIHJlKGFbaV0pOyB9CiAgICB0ZW1wbGF0ZTxjbGFzcyBULCBzaXplX3QgU1o+IHZvaWQgcmUoYXJyYXk8VCxTWj4mIGEpIHsgRjBSKGksU1opIHJlKGFbaV0pOyB9Cn0KdXNpbmcgbmFtZXNwYWNlIF9faW5wdXQ7CiAKbmFtZXNwYWNlIF9fb3V0cHV0IHsKICAgIHRlbXBsYXRlPGNsYXNzIFQxLCBjbGFzcyBUMj4gdm9pZCBwcihjb25zdCBwYWlyPFQxLFQyPiYgeCk7CiAgICB0ZW1wbGF0ZTxjbGFzcyBULCBzaXplX3QgU1o+IHZvaWQgcHIoY29uc3QgYXJyYXk8VCxTWj4mIHgpOwogICAgdGVtcGxhdGU8Y2xhc3MgVD4gdm9pZCBwcihjb25zdCB2ZWN0b3I8VD4mIHgpOwogICAgdGVtcGxhdGU8Y2xhc3MgVD4gdm9pZCBwcihjb25zdCBzZXQ8VD4mIHgpOwogICAgdGVtcGxhdGU8Y2xhc3MgVDEsIGNsYXNzIFQyPiB2b2lkIHByKGNvbnN0IG1hcDxUMSxUMj4mIHgpOwogCiAgICB0ZW1wbGF0ZTxjbGFzcyBUPiB2b2lkIHByKGNvbnN0IFQmIHgpIHsgY291dCA8PCB4OyB9CiAgICB0ZW1wbGF0ZTxjbGFzcyBBcmcsIGNsYXNzLi4uIEFyZ3M+IHZvaWQgcHIoY29uc3QgQXJnJiBmaXJzdCwgY29uc3QgQXJncyYuLi4gcmVzdCkgewogICAgICAgIHByKGZpcnN0KTsgcHIocmVzdC4uLik7CiAgICB9CiAKICAgIHRlbXBsYXRlPGNsYXNzIFQxLCBjbGFzcyBUMj4gdm9pZCBwcihjb25zdCBwYWlyPFQxLFQyPiYgeCkgewogICAgICAgIHByKCJ7Iix4LmYsIiwgIix4LnMsIn0iKTsKICAgIH0KICAgIHRlbXBsYXRlPGNsYXNzIFQsIGJvb2wgcHJldHR5ID0gdHJ1ZT4gdm9pZCBwckNvbnRhaW4oY29uc3QgVCYgeCkgewogICAgICAgIGlmIChwcmV0dHkpIHByKCJ7Iik7CiAgICAgICAgYm9vbCBmc3QgPSAxOyBmb3IgKGNvbnN0IGF1dG8mIGE6IHgpIHByKCFmc3Q/cHJldHR5PyIsICI6IiAiOiIiLGEpLCBmc3QgPSAwOwogICAgICAgIGlmIChwcmV0dHkpIHByKCJ9Iik7CiAgICB9CiAgICB0ZW1wbGF0ZTxjbGFzcyBUPiB2b2lkIHBjKGNvbnN0IFQmIHgpIHsgcHJDb250YWluPFQsIGZhbHNlPih4KTsgcHIoIlxuIik7IH0KICAgIHRlbXBsYXRlPGNsYXNzIFQsIHNpemVfdCBTWj4gdm9pZCBwcihjb25zdCBhcnJheTxULFNaPiYgeCkgeyBwckNvbnRhaW4oeCk7IH0KICAgIHRlbXBsYXRlPGNsYXNzIFQ+IHZvaWQgcHIoY29uc3QgdmVjdG9yPFQ+JiB4KSB7IHByQ29udGFpbih4KTsgfQogICAgdGVtcGxhdGU8Y2xhc3MgVD4gdm9pZCBwcihjb25zdCBzZXQ8VD4mIHgpIHsgcHJDb250YWluKHgpOyB9CiAgICB0ZW1wbGF0ZTxjbGFzcyBUMSwgY2xhc3MgVDI+IHZvaWQgcHIoY29uc3QgbWFwPFQxLFQyPiYgeCkgeyBwckNvbnRhaW4oeCk7IH0KIAogICAgdm9pZCBwcygpIHsgcHIoIlxuIik7IH0KICAgIHRlbXBsYXRlPGNsYXNzIEFyZz4gdm9pZCBwcyhjb25zdCBBcmcmIGZpcnN0KSB7CiAgICAgICAgcHIoZmlyc3QpOyBwcygpOwogICAgfQogICAgdGVtcGxhdGU8Y2xhc3MgQXJnLCBjbGFzcy4uLiBBcmdzPiB2b2lkIHBzKGNvbnN0IEFyZyYgZmlyc3QsIGNvbnN0IEFyZ3MmLi4uIHJlc3QpIHsKICAgICAgICBwcihmaXJzdCwiICIpOyBwcyhyZXN0Li4uKTsKICAgIH0KfQp1c2luZyBuYW1lc3BhY2UgX19vdXRwdXQ7CiAKI2RlZmluZSBUUkFDRSh4KSB4CiNkZWZpbmUgX19wbih4KSBwcigjeCwgIiA9ICIpCiNkZWZpbmUgcGQoLi4uKSBfX3BuKChfX1ZBX0FSR1NfXykpLCBwcyhfX1ZBX0FSR1NfXyksIGNvdXQgPDwgZmx1c2gKIApuYW1lc3BhY2UgX19hbGdvcml0aG0gewogICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBkZWR1cCh2ZWN0b3I8VD4mIHYpIHsKICAgICAgICBzb3J0KGFsbCh2KSk7IHYuZXJhc2UodW5pcXVlKGFsbCh2KSksIHYuZW5kKCkpOwogICAgfQogICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgdmVjdG9yPFQ+Ojpjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IHZlY3RvcjxUPiYgdiwgY29uc3QgVCYgeCkgewogICAgICAgIGF1dG8gaXQgPSBsb3dlcl9ib3VuZChhbGwodiksIHgpOyByZXR1cm4gaXQgIT0gdi5lbmQoKSAmJiAqaXQgPT0geCA/IGl0IDogdi5lbmQoKTsKICAgIH0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHNpemVfdCBpbmRleChjb25zdCB2ZWN0b3I8VD4mIHYsIGNvbnN0IFQmIHgpIHsKICAgICAgICBhdXRvIGl0ID0gZmluZCh2LCB4KTsgYXNzZXJ0KGl0ICE9IHYuZW5kKCkgJiYgKml0ID09IHgpOyByZXR1cm4gaXQgLSB2LmJlZ2luKCk7CiAgICB9CiAKICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMj4gdHlwZW5hbWUgdmVjdG9yPHBhaXI8VDEsIFQyPj46Oml0ZXJhdG9yIGxvd2VyX2JvdW5kKAogICAgICAgICAgICBjb25zdCB2ZWN0b3I8cGFpcjxUMSwgVDI+PiYgdiwgY29uc3QgVDEmIHgpIHsKICAgICAgICByZXR1cm4gbG93ZXJfYm91bmQoYWxsKHYpLCB4LCBbXShwYWlyPFQxLCBUMj4gYSwgcGFpcjxUMSwgVDI+IGIpIHsgcmV0dXJuIGEuZiA8IGIuZjsgfSk7CiAgICB9CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+IHR5cGVuYW1lIHZlY3RvcjxwYWlyPFQxLCBUMj4+OjppdGVyYXRvciB1cHBlcl9ib3VuZCgKICAgICAgICAgICAgY29uc3QgdmVjdG9yPHBhaXI8VDEsIFQyPj4mIHYsIGNvbnN0IFQxJiB4KSB7CiAgICAgICAgcmV0dXJuIHVwcGVyX2JvdW5kKGFsbCh2KSwgeCwgW10ocGFpcjxUMSwgVDI+IGEsIHBhaXI8VDEsIFQyPiBiKSB7IHJldHVybiBhLmYgPCBiLmY7IH0pOwogICAgfQogICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBQT1coVCBiLCBUIHApewogICAgICAgIFQgQW5zID0gMTsKICAgICAgICB3aGlsZShwKXtpZihwJjEpIEFucz0oQW5zKmIpOyBiKj1iLCBwPj49MTt9IHJldHVybiBBbnM7fQp9CnVzaW5nIG5hbWVzcGFjZSBfX2FsZ29yaXRobTsKIApzdHJ1Y3QgX19tb25vc3RhdGUgewogICAgZnJpZW5kIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYgaXMsIGNvbnN0IF9fYXR0cmlidXRlX18oKHVudXNlZCkpX19tb25vc3RhdGUmIG1zKSB7IHJldHVybiBpczsgfQogICAgZnJpZW5kIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYgb3MsIGNvbnN0IF9fYXR0cmlidXRlX18oKHVudXNlZCkpX19tb25vc3RhdGUmIG1zKSB7IHJldHVybiBvczsgfQp9IG1zOwogCm5hbWVzcGFjZSBfX2lvIHsKICAgIHZvaWQgc2V0SW4oc3RyaW5nIHMpIHsgZnJlb3BlbihzLmNfc3RyKCksInIiLHN0ZGluKTsgfQogICAgdm9pZCBzZXRPdXQoc3RyaW5nIHMpIHsgZnJlb3BlbihzLmNfc3RyKCksInciLHN0ZG91dCk7IH0KICAgIHZvaWQgc2V0SU8oc3RyaW5nIHMgPSAiIikgewogICAgICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7CiAgICAgICAgY291dCA8PCBzZXRwcmVjaXNpb24oMTUpOwogICAgICAgIGlmIChzeihzKSkgeyBzZXRJbihzKyIuaW4iKSwgc2V0T3V0KHMrIi5vdXQiKTsgfQogICAgfQp9CnVzaW5nIG5hbWVzcGFjZSBfX2lvOwovLyB9fX0KLy8gQVVUSE9SOkRhZGR5Q29vbF9fNjkKY29uc3QgaW50IE4gPSAyZTUrMTsKaW50IHQsIG4sIG0sIGssIGExLCBiMTsKdmkgc29sLCBhbnM7CmJvb2wgdmlzaXRlZFtOXSwgcnRbTl07CnZpIGdbTl07CnZvaWQgZGZzKGludCB1KQp7CiAgICBzb2wucGIodSk7CiAgICB2aXNpdGVkW3VdID0gMTsKICAgIGZvcihhdXRvIHY6Z1t1XSkKICAgIHsKICAgICAgICBpZih2aXNpdGVkW3ZdIHx8ICFydFt2XSkKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgZGZzKHYpOwogICAgfQp9CmludCBtYWluKCkKewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyBjaW4udGllKE5VTEwpOyBjb3V0LnRpZShOVUxMKTsKICAgIHJlKHQpOwogICAgd2hpbGUodC0tKQogICAgewogICAgICAgIGFucy5jbGVhcigpOwogICAgICAgIHNvbC5jbGVhcigpOwogICAgICAgIHJlKG4sIG0pOwogICAgICAgIHZpIGEobisxKSwgYihuKzEpOwogICAgICAgIEZPUihpLCAxLCBuKzEpCiAgICAgICAgICAgIHJlKGFbaV0pOwogICAgICAgIEZPUihpLCAxLCBuKzEpCiAgICAgICAgewogICAgICAgICAgICBnW2ldLmNsZWFyKCk7CiAgICAgICAgICAgIHJlKGJbaV0pOwogICAgICAgICAgICB2aXNpdGVkW2ldID0gMDsKICAgICAgICAgICAgcnRbaV0gPSAwOwogICAgICAgICAgICAvL2NvdXQ8PHJ0W2ldPDwiICI7CiAgICAgICAgfQogICAgICAgIGExID0gYVsxXTsKICAgICAgICBiMSA9IGJbMV07CiAgICAgICAgRk9SKGksIDIsIG4rMSkKICAgICAgICAgICAgaWYoYVtpXSpiMT5iW2ldKmExKQogICAgICAgICAgICAgICAgYTEgPSBhW2ldLCBiMSA9IGJbaV07CiAgICAgICAgRk9SKGksIDAsIG0pCiAgICAgICAgewogICAgICAgICAgICBpbnQgdSwgdjsKICAgICAgICAgICAgcmUodSwgdik7CiAgICAgICAgICAgIGdbdV0ucGIodik7CiAgICAgICAgICAgIGdbdl0ucGIodSk7CiAgICAgICAgfQogICAgICAgIEZPUihpLCAxLCBuKzEpCiAgICAgICAgewogICAgICAgICAgICBpZihhW2ldKmIxPT1iW2ldKmExKQogICAgICAgICAgICAgICAgcnRbaV0gPSAxOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBydFtpXSA9IDA7CiAgICAgICAgfQogICAgICAgIGZvcihpbnQgaSA9IG47IGk+PTE7IGktLSkKICAgICAgICB7CiAgICAgICAgICAgIGlmKCF2aXNpdGVkW2ldICYmIHJ0W2ldKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzb2wuY2xlYXIoKTsKICAgICAgICAgICAgICAgIGRmcyhpKTsKICAgICAgICAgICAgICAgIGlmKHN6KHNvbCk+c3ooYW5zKSkKICAgICAgICAgICAgICAgICAgICBhbnMgPSBzb2w7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcHMoc3ooYW5zKSk7CiAgICAgICAgZm9yKGludCB4OmFucykKICAgICAgICAgICAgY291dDw8eDw8IiAiOwogICAgICAgIGNvdXQ8PGVuZGw7CiAgICB9Cn0K