#include <bits/stdc++.h>
using namespace std;
const long long inf = 1e15;
long long q[300005];
long long d[300005];
long long dd[300005];
struct st {
  long long x, w, id;
};
vector<st> v[300005];
st t;
vector<long long> ans;
long long sum;
long long n, m;
long long x, y, z;
inline void dij(long long st) {
  for (long long i = 1; i <= n; ++i) d[i] = inf;
  set<pair<long long, long long> > s;
  d[st] = 0;
  s.insert(make_pair(0, st));
  while (!s.empty()) {
    long long x = s.begin()->second;
    s.erase(s.begin());
    for (long long i = 0; i < v[x].size(); ++i) {
      long long to = v[x][i].x;
      long long len = d[x] + v[x][i].w;
      if (d[to] > len) {
        s.erase(make_pair(d[to], to));
        d[to] = len;
        s.insert(make_pair(d[to], to));
      }
    }
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m;
  for (long long i = 1; i <= m; ++i) {
    cin >> x >> y >> z;
    t.x = y;
    t.w = z;
    t.id = i;
    v[x].push_back(t);
    t.x = x;
    v[y].push_back(t);
  }
  long long stt;
  cin >> stt;
  dij(stt);
  for (long long i = 1; i <= n; ++i) {
    long long mx = 1e9;
    for (long long j = 0; j < v[i].size(); ++j) {
      long long to = v[i][j].x;
      if (d[to] != d[i] - v[i][j].w) continue;
      mx = min(mx, v[i][j].w);
    }
    for (long long j = 0; j < v[i].size(); ++j) {
      long long to = v[i][j].x;
      if (d[to] != d[i] - v[i][j].w) continue;
      if (v[i][j].w == mx) {
        ans.push_back(v[i][j].id);
        sum += v[i][j].w;
        break;
      }
    }
  }
  cout << sum << '\n';
  for (long long i = 0; i < ans.size(); ++i) cout << ans[i] << " ";
}
