#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
typedef unsigned long long ll;
using namespace __gnu_pbds;
using namespace std;
#define ff first
#define ss second
#define pi pair<ll, ll>
#define pll pair<long long, long long>
#define vi vector<ll>
#define vll vector<long long>
#define vpi vector<pair<ll,ll>>
#define vpll vector<pair<long long, long long>>
#define pb push_back
#define count_bits(x) __builtin_popcountll((x))
#define all(x) (x).begin(),(x).end()
#define sz(x) (ll)(x).size()
#define forall(it,x) for(auto& it:(x))
#define mp make_pair
pi operator+(pi a, pi b) { return mp(a.ff+b.ff, a.ss+b.ss); }
pi operator-(pi a, pi b) { return mp(a.ff-b.ff, a.ss-b.ss); }
template <typename T>
using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
#include "multi.h"
vector<ll> rep;
ll Find(ll v) {
return rep[v]==v ? v : rep[v] = Find(rep[v]);
}
bool Union(ll a, ll b) {
a=Find(a);
b=Find(b);
if(a==b) return 0;
if(a < b) swap(a,b);
rep[a] = b;
return 1;
}
ll inf = 1ULL<<60;
std::vector<unsigned long long> strategy(int N, int r, int my,
std::vector<unsigned long long> A, std::vector<unsigned long long> B) {
rep.assign(N, 0);
ll X = B[0];
if(r==0) {
for(ll i=0; i<N; ++i) rep[i] = i;
} else {
set<ll> V;
for(ll i=1; i<N; ++i) {
rep[i] = B[i]%(1ULL<<8);
B[i] /= (1ULL<<8);
}
vector<pi> best(N, {inf,0});
for(ll i=1; i<N; ++i) {
ll nei = B[i]%(1ULL<<8);
B[i] /= (1ULL<<8);
best[Find(i)] = min(best[Find(i)], {B[i], nei});
}
for(int i=1; i<N; ++i) {
if(best[i].first < inf && Union(i, best[i].second)) {
X+=best[i].first;
}
}
for(int i=0; i<N; ++i) V.insert(Find(i));
if(V.size() == 1) {
return {X};
}
}
pi best = {inf,0};
for(ll i=0; i<N; ++i) if(Find(i)!=Find(my)) best = min(best, {A[i], i});
ll value = (best.first<<16) + (best.second<<8) + Find(my);
if(my==0) value = X;
vector<ll> C(N, value);
return C;
}