Pasha has many hamsters and he makes them work out. Today, n hamsters (n is even) came to work out. The hamsters lined up and each hamster either sat down or stood up.

For another exercise, Pasha needs exactly <image> hamsters to stand up and the other hamsters to sit down. In one minute, Pasha can make some hamster ether sit down or stand up. How many minutes will he need to get what he wants if he acts optimally well?

Input

The first line contains integer n (2 ≤ n ≤ 200; n is even). The next line contains n characters without spaces. These characters describe the hamsters' position: the i-th character equals 'X', if the i-th hamster in the row is standing, and 'x', if he is sitting.

Output

In the first line, print a single integer — the minimum required number of minutes. In the second line, print a string that describes the hamsters' position after Pasha makes the required changes. If there are multiple optimal positions, print any of them.

Examples

Input

4
xxXx


Output

1
XxXx


Input

2
XX


Output

1
xX


Input

6
xXXxXx


Output

0
xXXxXx
import java.io.*;
import java.math.BigInteger;
import java.util.*;

public class Template implements Runnable {

    BufferedReader in;
    PrintWriter out;
    StringTokenizer tok = new StringTokenizer("");

    void init() throws FileNotFoundException {
        try {
            in = new BufferedReader(new FileReader("input.txt"));
            out = new PrintWriter("output.txt");
        } catch (Exception e) {
            String filename = "";
            if (filename.isEmpty()) {
                in = new BufferedReader(new InputStreamReader(System.in));
                out = new PrintWriter(System.out);
            } else {
                in = new BufferedReader(new FileReader(filename + ".in"));
                out = new PrintWriter(filename + ".out");
            }
        }
    }

    String readString() throws IOException {
        while (!tok.hasMoreTokens()) {
            try {
                tok = new StringTokenizer(in.readLine());
            } catch (Exception e) {
                return null;
            }
        }
        return tok.nextToken();
    }

    int readInt() throws IOException {
        return Integer.parseInt(readString());
    }

    int[] readIntArray(int size) throws IOException {
        int[] res = new int[size];
        for (int i = 0; i < size; i++) {
            res[i] = readInt();
        }
        return res;
    }

    long readLong() throws IOException {
        return Long.parseLong(readString());
    }

    double readDouble() throws IOException {
        return Double.parseDouble(readString());
    }


    <T> List<T>[] createGraphList(int size) {
        List<T>[] list = new List[size];
        for (int i = 0; i < size; i++) {
            list[i] = new ArrayList<>();
        }
        return list;
    }

    public static void main(String[] args) {
        new Thread(null, new Template(), "", 1l * 200 * 1024 * 1024).start();
    }

    long timeBegin, timeEnd;

    void time() {
        timeEnd = System.currentTimeMillis();
        System.err.println("Time = " + (timeEnd - timeBegin));
    }

    long memoryTotal, memoryFree;

    void memory() {
        memoryFree = Runtime.getRuntime().freeMemory();
        System.err.println("Memory = " + ((memoryTotal - memoryFree) >> 10)
                + " KB");
    }

    public void run() {
        try {
            timeBegin = System.currentTimeMillis();
            memoryTotal = Runtime.getRuntime().freeMemory();
            init();
            solve();
            out.close();
            if (System.getProperty("ONLINE_JUDGE") == null) {
                time();
                memory();
            }
        } catch (Exception e) {
            e.printStackTrace();
            System.exit(-1);
        }
    }

    int n;
    int prime1, prime2;
    int mod1, mod2;
    int[] pow1, pow2;

    class Hash {
        int[] h1, h2;
        int n;

        Hash(char[] s) {
            this.n = s.length;
            h1 = new int[n];
            h2 = new int[n];
            h1[0] = h2[0] = s[0];
            for (int i = 1; i < n; i++) {
                h1[i] = (int) ((h1[i - 1] + (long) pow1[i] * s[i]) % mod1);
                h2[i] = (int) ((h2[i - 1] + (long) pow2[i] * s[i]) % mod2);
            }
        }

        long getHash(int L, int R) {
            int hash1 = getHash(L, R, h1, pow1, mod1);
            int hash2 = getHash(L, R, h2, pow2, mod2);
            return ((long) hash1 << 32) | hash2;
        }

        int getHash(int L, int R, int[] h, int[] pow, int mod) {
            int hash = h[R];
            if (L > 0)
                hash -= h[L - 1];
            if (hash < 0)
                hash += mod;
            return (int) ((long) hash * pow[n - R - 1] % mod);
        }


    }

    void init(int n) {
        Random rnd = new Random();
        prime1 = BigInteger.valueOf(3000 + rnd.nextInt(500))
                .nextProbablePrime().intValue();
        prime2 = BigInteger.valueOf(4000 + rnd.nextInt(500))
                .nextProbablePrime().intValue();
        mod1 = BigInteger.valueOf((int) 1e9 + rnd.nextInt(500))
                .nextProbablePrime().intValue();
        mod2 = BigInteger.valueOf((int) 1e9 + (int) 1e6 + rnd.nextInt(500))
                .nextProbablePrime().intValue();
        this.n = n;
        pow1 = new int[n];
        pow2 = new int[n];
        pow1[0] = pow2[0] = 1;
        for (int i = 1; i < n; i++) {
            pow1[i] = (int) ((long) pow1[i - 1] * prime1 % mod1);
            pow2[i] = (int) ((long) pow2[i - 1] * prime2 % mod2);
        }
    }

    Hash ha;
    Hash hb;

    boolean ok(int l, int r, int l2, int r2) {
        long x = ha.getHash(l, r);
        long y = hb.getHash(l2, r2);
        if (x == y) return true;

        if ((r - l + 1) % 2 == 1) return false;
        int m1 = (l + r) >> 1;
        int m2 = (l2 + r2) >> 1;

        return ok(l, m1, l2, m2) && ok(m1 + 1, r, m2 + 1, r2)
                || ok(m1 + 1, r, l2, m2) && ok(l, m1, m2 + 1, r2);
    }

    void solve() throws IOException {
        int n = readInt();
        char[] a = readString().toCharArray();

        int X = 0;
        int x = 0;

        for (char s : a) {
            if (s == 'X') X++;
            else x++;
        }
        int ans = Math.abs(X - x) / 2;
        int diff = Math.abs(X - x) / 2;
        for (int i = 0; i < n; i++) {
            char chX = X > x ? 'X' : 'x';
            if (diff > 0 && chX == a[i]) {
                diff--;
                a[i] = (char) ('X' + 'x' - a[i]);
            }
        }
        out.println(ans);
        out.println(new String(a));
    }


}