Problem:
B: Shortest Crypt

問題

xryuseixくんの学校では暗号が流行している. 格子状の街に住んでいるxryuseixくんは集合場所を決める新しい暗号を考えた.

暗号文は $N$ 文字の文字列 $S$ からなり, $S_i$ の文字によって現在地からの移動方向を決める. 移動方向に関しては以下の通りである.

A ~ M : 北に１マス進む.

N ~ Z : 南に１マス進む.

a ~ m : 東に１マス進む.

n ~ z : 西に１マス進む.

さて,ここでxryuseixくんは, yryuseiyちゃんにデートの集合場所を暗号文で教えようと思ったのだが, 暗号文が冗長なことに気づいた.

例えば,「ANA」という暗号文があったとしよう. これは北に $1$ マス進み, 南へ $1$ マス進んだのち北へ $1$ マス進む.
これは北に $1$ マス進む暗号文と等価なので,「ANA」＝「A」と, 簡潔にできる. xryuseixくんはyryuseiyちゃんに遠回りをさせないよう,暗号文を簡潔にしようと思った.

そこであなたはxryuseixくんに変わって, 暗号文を簡潔にするプログラムを書くことになった.
なお, 「暗号文を簡潔にする」とは,「元の暗号文と同じ目的地へ行く最も短い暗号文を作る」ということである.

制約

$N$ は整数であり, $S_i$ は大文字または小文字のアルファベットである.

$1 \leq N \leq 10^{5}$

入力形式

入力は以下の形式で与えられる.

$N$

$S$

出力

$1$ 行目に簡潔にした後の暗号文の長さ, $2$ 行目にその暗号文を出力せよ.
答えとしてありうる暗号文が複数存在する場合, どれを出力してもよい.
また各行の末尾に改行を出力せよ.

サンプル

サンプル入力 1

5
ANazA

サンプル出力 1

1
A

サンプル入力 2

7
ACMICPC

サンプル出力 2

5
HIJKL

サンプル入力 3

4
AIZU

サンプル出力 3

0

簡潔にした暗号文(空の文字列)のあとに改行が必要なことに注意.

Solution in C# (judge verdict: Accepted)

using System;
using System.Linq;

class AizuOnlineJudge {
    static void Main() {
        Console.ReadLine();
        var m = Console.ReadLine()
            .Aggregate(new[] { 0, 0 }, (p, c) => {
                p[c <= 'Z' ? 0 : 1] += char.ToUpper(c) <= 'M' ? 1 : -1;
                return p;
            });

        Console.WriteLine(Math.Abs(m[0]) + Math.Abs(m[1]));
        Console.WriteLine(
            new String(m[0] > 0 ? 'A' : 'N', Math.Abs(m[0])) + new String(m[1] > 0 ? 'a' : 'n', Math.Abs(m[1]))
        );
    }
}