#include <bits/stdc++.h>
using namespace std;
template <typename T>
bool cmp(T a, T b) {
  if (a.first != b.first) return a.first < b.first;
  return a.second < b.second;
}
struct pair_hash {
  template <class T1, class T2>
  size_t operator()(const pair<T1, T2> &pair) const {
    return hash<T1>()(pair.first) ^ hash<T2>()(pair.second);
  }
};
int n, m, temp, f, x, y;
long long int d;
bool complete[(int)3e5 + 10];
vector<vector<pair<long long int, int> > > adj((int)3e5 + 10);
multiset<pair<long long int, int> > s;
vector<long long int> minpath((int)3e5 + 10, (long long int)1e17 + 10);
vector<int> parent((int)3e5 + 10);
long long int acount = 0;
map<pair<int, int>, pair<int, long long int> > mi;
vector<int> ans;
void dijkstra(int u) {
  for (int i = 0; i < adj[u].size(); i++) {
    if (complete[adj[u][i].second]) continue;
    if (minpath[adj[u][i].second] >= minpath[u] + adj[u][i].first) {
      parent[adj[u][i].second] = u;
      s.erase(s.find(make_pair(minpath[adj[u][i].second], adj[u][i].second)));
      minpath[adj[u][i].second] = minpath[u] + adj[u][i].first;
      s.insert(make_pair(minpath[adj[u][i].second], adj[u][i].second));
    }
  }
  if (!s.empty()) {
    temp = s.begin()->second;
    complete[temp] = 1;
    acount +=
        mi[make_pair(min(temp, parent[temp]), max(temp, parent[temp]))].second;
    ans.push_back(
        mi[make_pair(min(temp, parent[temp]), max(temp, parent[temp]))].first);
    s.erase(s.begin());
    dijkstra(temp);
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  memset(complete, 0, sizeof(complete));
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    cin >> x >> y >> d;
    adj[x].push_back(make_pair(d, y));
    adj[y].push_back(make_pair(d, x));
    mi[make_pair(min(x, y), max(x, y))] = make_pair(i + 1, d);
  }
  cin >> f;
  for (int i = 1; i <= n; i++)
    if (i != f) s.insert(make_pair((long long int)1e17 + 10, i));
  parent[f] = f;
  minpath[f] = 0;
  complete[f] = 1;
  dijkstra(f);
  sort(ans.begin(), ans.end());
  cout << acount << "\n";
  for (int i = 0; i < ans.size(); i++) cout << ans[i] << " ";
  return 0;
}
