```go
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
in := bufio.NewReader(os.Stdin)
out := bufio.NewWriter(os.Stdout)
defer out.Flush()
var n int
if _, err := fmt.Fscan(in, &n); err != nil {
return
}
arr := make([]int64, n)
mp := make(map[int64]struct{}, n)
for i := 0; i < n; i++ {
var x int64
fmt.Fscan(in, &x)
arr[i] = x
mp[x] = struct{}{}
}
pairFound := false
var p1, p2 int64
for _, x := range arr {
for k := 0; k <= 30; k++ {
delta := int64(1) << uint(k)
y := x + delta
if _, ok := mp[y]; ok {
if !pairFound {
p1, p2 = x, y
pairFound = true
}
z := x + 2*delta
if _, ok2 := mp[z]; ok2 {
fmt.Fprintln(out, 3)
fmt.Fprintln(out, x, y, z)
return
}
}
}
}
if pairFound {
fmt.Fprintln(out, 2)
fmt.Fprintln(out, p1, p2)
return
}
fmt.Fprintln(out, 1)
fmt.Fprintln(out, arr[0])
}
```