#include <bits/stdc++.h>
using namespace std;
long long int gcd(long long int a, long long int b) {
  return b == 0 ? a : gcd(b, a % b);
}
long long int lcm(long long int a, long long int b) {
  return a * (b / gcd(a, b));
}
long long int power(long long int a, long long int b) {
  long long int ans = 1;
  while (b > 0) {
    if (b & 1) ans = ((ans % 1000000007) * (a % 1000000007)) % 1000000007;
    a = ((a % 1000000007) * (a % 1000000007)) % 1000000007;
    b >>= 1;
  }
  return ans;
}
vector<vector<pair<long long int, long long int> > > adj;
long long int parent[300010], dis[300010], n, enter[300010];
void shortest_path(long long int source) {
  long long int i;
  dis[source] = 0;
  priority_queue<pair<long long int, long long int>,
                 vector<pair<long long int, long long int> >,
                 greater<pair<long long int, long long int> > >
      p;
  p.push(make_pair(0, source));
  while (!p.empty()) {
    pair<long long int, long long int> T = p.top();
    long long int d = T.first;
    long long int curr = T.second;
    p.pop();
    if (d > dis[curr]) continue;
    for (auto it : adj[curr]) {
      if (dis[curr] + it.first <= dis[it.second]) {
        if (it.first < enter[it.second]) {
          enter[it.second] = it.first;
          parent[it.second] = curr;
          dis[it.second] = dis[curr] + it.first;
          p.push(make_pair(dis[it.second], it.second));
        }
      }
    }
  }
  return;
}
int main() {
  long long int max_val = 1e18;
  map<pair<long long int, long long int>, long long int> ma;
  long long int m, i;
  long long int u, v, w;
  cin >> n >> m;
  for (i = 1; i < n + 1; i++) {
    dis[i] = max_val;
    enter[i] = max_val;
  }
  adj.resize(n + 1);
  for (i = 1; i < m + 1; i++) {
    cin >> u >> v >> w;
    ma[pair<long long int, long long int>(u, v)] = i;
    ma[pair<long long int, long long int>(v, u)] = i;
    adj[u].push_back(make_pair(w, v));
    adj[v].push_back(make_pair(w, u));
  }
  long long int source;
  cin >> source;
  shortest_path(source);
  long long int sum = 0;
  for (i = 1; i < n + 1; i++)
    if (enter[i] != max_val) sum += enter[i];
  cout << sum << endl;
  for (i = 1; i < n + 1; i++)
    if (enter[i] != max_val)
      cout << ma[pair<long long int, long long int>(i, parent[i])] << " ";
  cout << endl;
  return 0;
}
