def special2csa(str)
      {
        "中断" => "CHUDAN",
        "投了" => "TORYO",
        "持将棋" => "JISHOGI",
        "千日手" => "SENNICHITE",
        "詰み" => "TSUMI",
        "不詰" => "FUZUMI",
        "切れ負け" => "TIME_UP",
        "反則勝ち" => "ILLEGAL_ACTION", # 直前の手が反則(先頭に+か-で反則した側の情報を含める必要が有る)
        "反則負け" => "ILLEGAL_MOVE" # ここで手番側が反則，反則の内容はコメントで表現
      }[str] || (raise ParseError)
    end
def special2csa(str)
      {
        "中断" => "CHUDAN",
        "投了" => "TORYO",
        "持将棋" => "JISHOGI",
        "千日手" => "SENNICHITE",
        "詰み" => "TSUMI",
        "不詰" => "FUZUMI",
        "切れ負け" => "TIME_UP",
        "反則勝ち" => "ILLEGAL_ACTION", # 直前の手が反則(先頭に+か-で反則した側の情報を含める必要が有る)
        "反則負け" => "ILLEGAL_MOVE" # ここで手番側が反則，反則の内容はコメントで表現
      }[str] || (raise ParseError)
    end
special string to csa