← Home
```go
package main

import (
	"fmt"
)

func main() {
	var n int
	if _, err := fmt.Scan(&n); err != nil {
		return
	}

	ans := make([]byte, n+1)
	for i := 1; i <= n; i++ {
		ans[i] = '?'
	}

	query := func(s string) []int {
		fmt.Printf("? %s\n", s)
		var k int
		fmt.Scan(&k)
		res := make([]int, k)
		for i := 0; i < k; i++ {
			fmt.Scan(&res[i])
		}
		return res
	}

	pairs := []string{"CC", "CH", "CO", "HO", "OO"}
	for _, p := range pairs {
		res := query(p)
		for _, pos := range res {
			ans[pos] = p[0]
			ans[pos+1] = p[1]
		}
	}

	for i := 2; i <= n-1; i++ {
		if ans[i] == '?' {
			ans[i] = 'H'
		}
	}

	if n >= 4 {
		if ans[1] == '?' && ans[n] == '?' {
			allH := true
			for i := 2; i <= n-1; i++ {
				if ans[i] != 'H' {
					allH = false
					break
				}
			}
			if allH {
				s := ""
				for i := 0; i < n-1; i++ {
					s += "H"
				}
				res := query(s)
				ans[1] = 'O'
				ans[n] = 'C'
				for _, pos := range res {
					if pos == 1 {
						ans[1] = 'H'
					}
					if pos == 2 {
						ans[n] = 'H'
					}
				}
			} else {
				if n >= 5 {
					s1 := "H" + string(ans[2:5])
					res1 := query(s1)
					ans[1] = 'O'
					for _, pos := range res1 {
						if pos == 1 {
							ans[1] = 'H'
						}
					}
					
					s2 := string(ans[n-3:n]) + "C"
					res2 := query(s2)
					ans[n] = 'H'
					for _, pos := range res2 {
						if pos == n-3 {
							ans[n] = 'C'
						}
					}
				} else {
					s2 := string(ans[2:4]) + "C"
					res2 := query(s2)
					ans[4] = 'H'
					for _, pos := range res2 {
						if pos == 2 {
							ans[4] = 'C'
						}
					}
					ans[1] = 'O'
				}
			}
		} else if ans[1] == '?' {
			maxLen := 4
			if n < 4 {
				maxLen = n
			}
			s := "H" + string(ans[2:1+maxLen])
			res := query(s)
			ans[1] = 'O'
			for _, pos := range res {
				if pos == 1 {
					ans[1] = 'H'
				}
			}
		} else if ans[n] == '?' {
			minPos := n - 3
			if minPos < 1 {
				minPos = 1
			}
			s := string(ans[minPos:n]) + "C"
			res := query(s)
			ans[n] = 'H'
			for _, pos := range res {
				if pos == minPos {
					ans[n] = 'C'
				}
			}
		}
	} else {
		if ans[1] == '?' {
			ans[1] = 'O'
		}
		if n >= 2 && ans[n] == '?' {
			ans[n] = 'H'
		}
	}

	fmt.Printf("! %s\n", string(ans[1:]))
}
```