#include <bits/stdc++.h>
using namespace std;
int n, m, x, y, z, nu, fx, fy;
struct node {
  int p, f, id;
};
struct node2 {
  int x, y, z;
} a[310000];
bool cmp(node2 a, node2 b) { return a.z < b.z; }
long long ans = 0;
vector<node> e[310000];
int fa[310000], b[310000], dis[310000];
queue<int> q;
long long f[310000];
bool v[310000];
int get(int x) {
  if (x == fa[x]) return x;
  return fa[x] = get(fa[x]);
}
void spfa() {
  for (int i = 1; i <= n; i++) f[i] = 100000000000000000LL, v[i] = false;
  f[nu] = 0;
  q.push(nu);
  while (!q.empty()) {
    x = q.front();
    q.pop();
    v[x] = false;
    for (int i = 0; i < e[x].size(); i++) {
      y = e[x][i].p, z = e[x][i].f;
      if (f[x] + z < f[y]) {
        f[y] = f[x] + z;
        if (!v[y]) {
          v[y] = true;
          q.push(y);
        }
      }
    }
  }
}
int main() {
  scanf("%d %d", &n, &m);
  for (int i = 1; i <= m; i++) {
    scanf("%d %d %d", &a[i].x, &a[i].y, &a[i].z);
    e[a[i].x].push_back(node{a[i].y, a[i].z, i});
    e[a[i].y].push_back(node{a[i].x, a[i].z, i});
  }
  scanf("%d", &nu);
  spfa();
  for (int i = 1; i <= n; i++)
    if (i != nu) {
      int w = 2 * 1e9, wid = 0;
      for (int j = 0; j < e[i].size(); j++) {
        y = e[i][j].p;
        z = e[i][j].f;
        if (f[y] + z == f[i]) {
          if (z < w) {
            w = z;
            wid = e[i][j].id;
          }
        }
      }
      ans += w;
      b[wid] = 1;
    }
  cout << ans << endl;
  for (int i = 1; i <= m; i++)
    if (b[i] == 1) printf("%d ", i);
}
