#include <bits/stdc++.h>
#pragma GCC optimize("O2")
using namespace std;
const long double EPS = 0.000000001;
const long long INF64 = 1000000000000000000;
const long long INF32 = 2000000000;
bool iss_pt_in_triangle(pair<long long, long long> a,
                        pair<long long, long long> b,
                        pair<long long, long long> c,
                        pair<long long, long long> point) {
  long long x1 = a.first, x2 = b.first, x3 = c.first, x0 = point.first;
  long long y1 = a.second, y2 = b.second, y3 = c.second, y0 = point.second;
  long long aa = (x1 - x0) * (y2 - y1) - (x2 - x1) * (y1 - y0);
  long long bb = (x2 - x0) * (y3 - y2) - (x3 - x2) * (y2 - y0);
  long long cc = (x3 - x0) * (y1 - y3) - (x1 - x3) * (y3 - y0);
  if (aa == 0 || bb == 0 || cc == 0) return 1;
  if (aa >= 0 && bb >= 0 && cc >= 0) return 1;
  if (aa <= 0 && bb <= 0 && cc <= 0) return 1;
  return 0;
}
bool iss_ll(long long &__1, long long &__2) { return INF64 / __1 >= __2; }
bool equall(long double _1, long double _2) { return (abs(_1 - _2) < EPS); }
bool iss_sqr(long long __1) {
  long long __2 = sqrt((long double)__1);
  return __2 * __2 == __1;
};
bool iss_prime(long long __1) {
  for (long long i = 2; i * i <= __1; ++i)
    if (!(__1 % i)) return 0;
  return 1;
}
long long gcd(long long x, long long y) {
  while (x > 0 && y > 0) {
    if (x > y)
      x = x % y;
    else
      y = y % x;
  }
  return x + y;
}
long long lcm(long long &__1, long long &__2) {
  return __1 * __2 / (gcd(__1, __2));
}
long long sq_cube(long long x) {
  if (x == 0) return 0;
  long long l = 0, r = 2e6;
  while (l + 1 < r) {
    long long m = (l + r) / 2;
    if (m * m * m > x)
      r = m;
    else
      l = m;
  }
  return l;
}
long long bigprost() {
  long long x = INF32;
  srand(0);
  x += (rand() * rand());
  while (!iss_prime(x)) ++x;
  return x;
}
vector<long long> G[100100];
signed main(void) {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long long n, s;
  cin >> n >> s;
  for (long long i = 1; i < n; ++i) {
    long long x, y;
    cin >> x >> y;
    G[x].push_back(y);
    G[y].push_back(x);
  }
  long long cnt = 0;
  for (long long i = 1; i <= n; ++i) {
    if (G[i].size() == 1) ++cnt;
  }
  cout << setprecision(100) << s * 2.0 / cnt << "\n";
  return 0;
}
