package main
import (
"bufio"
"fmt"
"os"
)
var (
adj [11][11]bool
n, m, k int
L, D int
chosen [11]int
seq [11]int
ans int
)
func main() {
in := bufio.NewReader(os.Stdin)
fmt.Fscan(in, &n, &m, &k)
for i := 0; i < m; i++ {
var u, v int
fmt.Fscan(in, &u, &v)
adj[u][v] = true
adj[v][u] = true
}
L = n - 2
D = n - k
chooseElements(1, 0)
fmt.Println(ans)
}
func chooseElements(start, count int) {
if count == D {
generate(0, 0, 0)
return
}
if n-start+1 < D-count {
return
}
for i := start; i <= n; i++ {
chosen[count] = i
chooseElements(i+1, count+1)
}
}
func generate(idx int, usedMask int, distinctCount int) {
if L-idx < D-distinctCount {
return
}
if idx == L {
checkSequence()
return
}
for i := 0; i < D; i++ {
v := chosen[i]
newMask := usedMask | (1 << v)
newCount := distinctCount
if newMask != usedMask {
newCount++
}
seq[idx] = v
generate(idx+1, newMask, newCount)
}
}
func checkSequence() {
var deg [11]int
for i := 1; i <= n; i++ {
deg[i] = 1
}
for i := 0; i < L; i++ {
deg[seq[i]]++
}
ptr := 1
for ptr <= n && deg[ptr] != 1 {
ptr++
}
leaf := ptr
for i := 0; i < L; i++ {
v := seq[i]
if !adj[leaf][v] {
return
}
deg[leaf]--
deg[v]--
if v < ptr && deg[v] == 1 {
leaf = v
} else {
ptr++
for ptr <= n && deg[ptr] != 1 {
ptr++
}
leaf = ptr
}
}
u, v := -1, -1
for i := 1; i <= n; i++ {
if deg[i] == 1 {
if u == -1 {
u = i
} else {
v = i
break
}
}
}
if !adj[u][v] {
return
}
ans++
}