#include <bits/stdc++.h>
using namespace std;
const int mod = (int)1e9 + 9;
const long long inf = (long long)1e18;
int n, m, u;
vector<vector<pair<int, int>>> g;
vector<pair<long long, long long>> d;
vector<long long> sel_e;
set<pair<pair<int, int>, pair<int, int>>> st;
void prim(void) {
  d[u].first = 0;
  set<pair<long long, int>> q;
  q.insert(make_pair(d[u].first, u));
  for (int i = 0; i < n; ++i) {
    int v = q.begin()->second;
    q.erase(q.begin());
    set<pair<pair<int, int>, pair<int, int>>>::iterator it;
    for (size_t j = 0; j < g[v].size(); ++j) {
      int to = g[v][j].first, len = g[v][j].second;
      it = st.lower_bound(make_pair(make_pair(v, to), make_pair(0, 0)));
      int reb = (*it).second.second;
      if (d[v].first + len < d[to].first ||
          d[v].first + len == d[to].first && d[to].second > reb) {
        q.erase(make_pair(d[to].first, to));
        d[to].first = d[v].first + len;
        d[to].second = reb;
        sel_e[to] = v;
        q.insert(make_pair(d[to].first, to));
      }
    }
  }
}
int main() {
  scanf("%d %d", &n, &m);
  d.resize(n + 1, make_pair(inf, inf));
  sel_e.resize(n + 1, -1);
  g.resize(n + 1);
  for (int i = 0; i < m; i++) {
    int x, y, z;
    scanf("%d %d %d", &x, &y, &z);
    g[x].push_back(make_pair(y, z));
    g[y].push_back(make_pair(x, z));
    st.insert(make_pair(make_pair(x, y), make_pair(i + 1, z)));
    st.insert(make_pair(make_pair(y, x), make_pair(i + 1, z)));
  }
  scanf("%d", &u);
  prim();
  vector<int> ans;
  long long sum = 0;
  for (int i = 1; i < n + 1; i++) {
    if (sel_e[i] != -1) {
      set<pair<pair<int, int>, pair<int, int>>>::iterator it =
          st.lower_bound(make_pair(make_pair(i, sel_e[i]), make_pair(0, 0)));
      if (it != st.end() && (*it).first.first == i &&
          (*it).first.second == sel_e[i]) {
        ans.push_back((*it).second.first);
        sum += (*it).second.second;
      }
    }
  }
  printf("%I64d\n", sum);
  for (int i = 0; i < (int)ans.size(); i++) printf("%d ", ans[i]);
  return 0;
}
