← Home
package main

import (
	"bufio"
	"fmt"
	"os"
)

var n int
var g [][]int

func transform(a []float64) []float64 {
	res := make([]float64, len(a)+1)
	for k, v := range a {
		d := float64(k + 1)
		res[0] += 0.5 * v / d
		res[k+1] += v * (1.0 - 0.5/d)
	}
	return res
}

func multiply(a, b []float64) []float64 {
	res := make([]float64, len(a)+len(b)-1)
	for i, x := range a {
		for j, y := range b {
			res[i+j] += x * y
		}
	}
	return res
}

func solveRoot(r int) float64 {
	var dfs func(int, int) []float64
	dfs = func(v, p int) []float64 {
		h := []float64{1.0}
		for _, to := range g[v] {
			if to == p {
				continue
			}
			child := dfs(to, v)
			h = multiply(h, transform(child))
		}
		return h
	}
	return dfs(r, 0)[0]
}

func main() {
	in := bufio.NewReader(os.Stdin)
	fmt.Fscan(in, &n)

	g = make([][]int, n+1)
	for i := 0; i < n-1; i++ {
		var u, v int
		fmt.Fscan(in, &u, &v)
		g[u] = append(g[u], v)
		g[v] = append(g[v], u)
	}

	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()

	for i := 1; i <= n; i++ {
		if i > 1 {
			fmt.Fprint(out, " ")
		}
		fmt.Fprintf(out, "%.10f", solveRoot(i))
	}
	fmt.Fprintln(out)
}