#include <algorithm>
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
typedef pair<int, int> ii;
typedef pair<int, ii> iii;
typedef vector<int> vi;
typedef vector<ii> vii;
typedef vector<iii> viii;
vector<vii> AdjList;
priority_queue< iii, vector<iii>, greater<iii> > pq;
vi visited;
int V, E, a, b, w, s, cost = 0;
void update(int edge){
visited[edge] = 1;
for (int j = 0; j < AdjList[edge].size(); j++){
ii v = AdjList[edge][j];
if (visited[v.first]==0)
pq.push(iii(v.second, ii(edge, v.first)));
}
}
void prim(){
visited.assign(V+1, 0);
update(s);
while (!pq.empty()){
iii pri = pq.top();
pq.pop();
int w = pri.first;
int a = pri.second.first;
int b = pri.second.second;
if (visited[b]==0){
cost += w;
cout << a << " " << b << endl;
}
update(b);
}
}
int main() {
cin >> V >> E >> s;
AdjList.assign(V+1, vii());
for (int i = 0; i < E; i++){
cin >> a >> b >> w;
AdjList[a].push_back(ii(b, w));
AdjList[b].push_back(ii(a, w));
}
prim();
cout << cost;
return 0;
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8cXVldWU+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IGlpOwp0eXBlZGVmIHBhaXI8aW50LCBpaT4gaWlpOwp0eXBlZGVmIHZlY3RvcjxpbnQ+IHZpOwp0eXBlZGVmIHZlY3RvcjxpaT4gdmlpOwp0eXBlZGVmIHZlY3RvcjxpaWk+IHZpaWk7CnZlY3Rvcjx2aWk+IEFkakxpc3Q7CnByaW9yaXR5X3F1ZXVlPCBpaWksIHZlY3RvcjxpaWk+LCBncmVhdGVyPGlpaT4gPiBwcTsKdmkgdmlzaXRlZDsKCgppbnQgViwgRSwgYSwgYiwgdywgcywgY29zdCA9IDA7Cgp2b2lkIHVwZGF0ZShpbnQgZWRnZSl7CiAgdmlzaXRlZFtlZGdlXSA9IDE7CiAgZm9yIChpbnQgaiA9IDA7IGogPCBBZGpMaXN0W2VkZ2VdLnNpemUoKTsgaisrKXsKICAgIGlpIHYgPSBBZGpMaXN0W2VkZ2VdW2pdOwogICAgaWYgKHZpc2l0ZWRbdi5maXJzdF09PTApCiAgICAgICAgcHEucHVzaChpaWkodi5zZWNvbmQsIGlpKGVkZ2UsIHYuZmlyc3QpKSk7CiAgIH0KfQoKdm9pZCBwcmltKCl7CiAgdmlzaXRlZC5hc3NpZ24oVisxLCAwKTsKICB1cGRhdGUocyk7CgogIHdoaWxlICghcHEuZW1wdHkoKSl7CiAgICBpaWkgcHJpID0gcHEudG9wKCk7CiAgICBwcS5wb3AoKTsKICAgIGludCB3ID0gcHJpLmZpcnN0OwogICAgaW50IGEgPSBwcmkuc2Vjb25kLmZpcnN0OwogICAgaW50IGIgPSBwcmkuc2Vjb25kLnNlY29uZDsKCiAgICBpZiAodmlzaXRlZFtiXT09MCl7CiAgICAgIGNvc3QgKz0gdzsKICAgICAgY291dCA8PCBhIDw8ICIgIiA8PCBiIDw8IGVuZGw7CiAgICB9CiAgICB1cGRhdGUoYik7CiAgfQp9CgppbnQgbWFpbigpIHsKCgogIGNpbiA+PiBWID4+IEUgPj4gczsKICBBZGpMaXN0LmFzc2lnbihWKzEsIHZpaSgpKTsKCiAgZm9yIChpbnQgaSA9IDA7IGkgPCBFOyBpKyspewogICAgY2luID4+IGEgPj4gYiA+PiB3OwogICAgQWRqTGlzdFthXS5wdXNoX2JhY2soaWkoYiwgdykpOwogICAgQWRqTGlzdFtiXS5wdXNoX2JhY2soaWkoYSwgdykpOwogIH0KCiAgcHJpbSgpOwogIGNvdXQgPDwgY29zdDsKCnJldHVybiAwOwp9Cg==