let genSafeWord = let cnt = ref 1 (fun (preWord:string) -> let preWord = preWord.ToCharArray() let preLastCharacter = preWord |> Array.last let addWord = let w = (('a' |> int) + cnt.Value) |> char incr cnt if w = 'n' then //nで終わるとoutになる let w =(('a' |> int) + cnt.Value) |> char incr cnt w else w let newWord = new string[|preLastCharacter;addWord|] newWord) let genOutWord (preWord:string)= let preWord = preWord.ToCharArray() let preLastCharacter = preWord |> Array.last let addWord = 'n' let newWord = new string[|preLastCharacter;addWord|] newWord let startWord = "aa" let startChain = 0 let n = stdin.ReadLine() |> int (startWord,startChain) |> Seq.unfold (fun (word,chain)-> match chain with | x when x = (n-1) -> //n個目の単語はoutな単語を生成する let newWord = genOutWord word Some(word,(newWord,chain+1)) | _ -> let newWord = genSafeWord word Some(word,(newWord,chain+1))) |> Seq.skip 1 |> Seq.take n |> Seq.iter(printfn "%s")