#include "Azer.h"
#include <bits/stdc++.h>
namespace {
using namespace std;
#define vi vector<int>
#define pi pair<int, int>
int n, cnt;
int cur = 0, bt = 0;
vector<vector<pi>> adj;
vi dist;
vi arr;
int szB = -1;
const int inf = 1e8;
void dijkstra(int s, vi& dist, vector<vector<pi>>& adj) {
multiset<pi> st;
dist[s] = 0;
st.insert({0, s});
while (!st.empty()) {
int v, d;
tie(d, v) = *st.begin();
st.erase(st.begin());
for (pi p : adj[v]) {
int to, w;
tie(to, w) = p;
if (dist[v] + w > dist[to]) continue;
st.erase({dist[to], to});
dist[to] = dist[v] + w;
st.insert({dist[to], to});
}
}
}
}
void InitA(int N, int A, std::vector<int> U, std::vector<int> V, std::vector<int> C) {
n = N;
dist.resize(n, inf);
adj.resize(n);
for (int i = 0; i < A; i++) { adj[U[i]].push_back(make_pair(V[i], C[i])); adj[V[i]].push_back(make_pair(U[i], C[i])); }
}
void ReceiveA(bool x) {
cur = cur + ((1<<bt) * x);
bt++;
if (bt == 20) {
arr.push_back(cur);
bt = cur = 0;
}
if (arr.size() == 3) {
adj[arr[0]].push_back({arr[1], arr[2]});
adj[arr[1]].push_back({arr[0], arr[2]});
arr.clear();
}
}
std::vector<int> Answer() {
dijkstra(0, dist, adj);
return dist;
}
#include "Baijan.h"
#include <bits/stdc++.h>
using namespace std;
#define vi vector<int>
void sendInt(int x) {
for (int i = 0; i < 20; i++) SendB(x & (1<<i));
}
void InitB(int N, int B, std::vector<int> S, std::vector<int> T, std::vector<int> D) {
for (int i = 0; i < B; i++) {
cerr << S[i] << ' ' << T[i] << ' ' << D[i] << endl;
sendInt(S[i]);
sendInt(T[i]);
sendInt(D[i]);
}
}
void ReceiveB(bool y) {
}