package main import ( "bufio" "fmt" "os" "sort" "strconv" "strings" ) func main() { k := readInt() S := make([]string, 16) T := make([]string, 16) nupc := []string{"N", "U", "P", "C"} for b := 0; b < (1 << 4); b++ { s := "" for i := 0; i < 4; i++ { s += nupc[i] if (b>>i)&1 == 1 { s += "1" } else { s += "2" } } S[b] = s } for i := 0; i < 16; i++ { s := S[i] t := "" for j := 0; j < 4; j++ { t += nupc[j] if s[2*j+1] == '2' { t += t } } T[i] = t } sort.Slice(T, func(i, j int) bool { return T[i] < T[j] }) writeLine(T[k-1]) } func sum[T int | float64](arr ...T) T { sum := arr[0] for i := 1; i < len(arr); i++ { sum += arr[i] } return sum } func pow(x, n int) int { res := 1 for n > 0 { if n&1 == 1 { res = res * x } x = x * x n >>= 1 } return res } func lcm(a, b int) int { return a / gcd(a, b) * b } func gcd(a, b int) int { if b == 0 { return a } return gcd(b, a%b) } func abs[T int | float64](x T) T { if x < 0 { return -x } return x } func min[T int | float64](arr ...T) T { min := arr[0] for _, v := range arr { if v < min { min = v } } return min } func max[T int | float64](arr ...T) T { max := arr[0] for _, v := range arr { if v > max { max = v } } return max } var _stdInReader = bufio.NewReader(os.Stdin) func readLine() string { line, _ := _stdInReader.ReadString('\n') return strings.TrimSpace(line) } func readString() string { return readLine() } func readInt() int { strs := readString() num, _ := strconv.Atoi(strs) return num } func readLong() int64 { strs := readString() num, _ := strconv.ParseInt(strs, 10, 64) return num } func readStrings() []string { line := readLine() return strings.Split(line, " ") } func readInts() []int { strs := readStrings() arr := make([]int, len(strs)) for i := 0; i < len(strs); i++ { arr[i], _ = strconv.Atoi(strs[i]) } return arr } func readLongs() []int64 { strs := readStrings() arr := make([]int64, len(strs)) for i := 0; i < len(strs); i++ { arr[i], _ = strconv.ParseInt(strs[i], 10, 64) } return arr } func readDoubles() []float64 { strs := readStrings() arr := make([]float64, len(strs)) for i := 0; i < len(strs); i++ { arr[i], _ = strconv.ParseFloat(strs[i], 64) } return arr } func scanStringVariables(args ...*string) { n := len(args) scanned := 0 for n > scanned { inputSlice := readStrings() m := len(inputSlice) if m == 0 || m > n-scanned { fmt.Print("Something wrong in scanStringVariables !!!") return } for i := 0; i < m; i++ { *args[i+scanned] = inputSlice[i] } scanned += m } } func scanIntVariables(args ...*int) { n := len(args) scanned := 0 for n > scanned { inputSlice := readInts() m := len(inputSlice) if m == 0 || m > n-scanned { fmt.Printf("m %d n %d scanned %d. ", m, n, scanned) fmt.Print("Something wrong in scanIntVariables !!!") return } for i := 0; i < m; i++ { *args[i+scanned] = inputSlice[i] } scanned += m } } func scanLongVariables(args ...*int64) { n := len(args) scanned := 0 for n > scanned { inputSlice := readLongs() m := len(inputSlice) if m == 0 || m > n-scanned { fmt.Print("Something wrong in scanIntVariables !!!") return } for i := 0; i < m; i++ { *args[i+scanned] = inputSlice[i] } scanned += m } } func write(arg ...interface{}) { fmt.Print(arg...) } func writeLine(arg ...interface{}) { fmt.Println(arg...) } func writeFormat(f string, arg ...interface{}) { fmt.Printf(f, arg...) }