← Home
```go
package main

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

func main() {
	r := bufio.NewReader(os.Stdin)
	var n, m int
	fmt.Fscan(r, &n, &m)

	parent := make([]int, n+1)
	for i := 1; i <= n; i++ {
		parent[i] = i
	}

	var find func(int) int
	find = func(x int) int {
		if parent[x] != x {
			parent[x] = find(parent[x])
		}
		return parent[x]
	}

	merges := 0
	for i := 0; i < m; i++ {
		var u, v int
		fmt.Fscan(r, &u, &v)
		rootU, rootV := find(u), find(v)
		if rootU != rootV {
			parent[rootU] = rootV
			merges++
		}
	}

	fmt.Println(int64(1) << merges)
}
```