#include <bits/stdc++.h>
using namespace std;
long long fib[100001];
void fibonacci() {
  fib[0] = 1;
  fib[1] = 1;
  fib[2] = 2;
  for (long long i = 3; i <= 100000; i++) {
    fib[i] = fib[i - 1] + fib[i - 2];
    fib[i] = fib[i] % 1000000007;
  }
}
double dist(double x, double y, double a, double b) {
  return sqrt((x - a) * (x - a) + (y - b) * (y - b));
}
char alphabet[26] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
                     'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r',
                     's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
long long power(long long x, unsigned long long y) {
  long long res = 1;
  while (y > 0) {
    if (y & 1) res = res * x;
    y = y >> 1;
    x = x * x;
  }
  return res;
}
long long mpower(long long x, unsigned long long y, long long p) {
  long long res = 1;
  x = x % p;
  while (y > 0) {
    if (y & 1) res = (res * x) % p;
    y = y >> 1;
    x = (x * x) % p;
  }
  return res;
}
long long gcd(long long a, long long b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
void swap(long long* a, long long* b) {
  long long temp = *a;
  *a = *b;
  *b = temp;
}
char nxtchr(long long c) {
  if (c == 1) return '1';
  if (c == 2) return '2';
  if (c == 3) return '3';
  if (c == 4) return '4';
  if (c == 5) return '5';
  if (c == 6) return '6';
  if (c == 7) return '7';
  if (c == 8) return '8';
  if (c == 9) return '9';
  if (c == 0) return '0';
  return -1;
}
long long dislet(string s) {
  long long i = 0, count = 0;
  while (i < s.size()) {
    char c = s[i];
    long long j = i;
    count++;
    while (s[j] == c) j++;
    i = j;
  }
  return count;
}
long long findIndex(long long key, vector<pair<long long, long long>> v,
                    long long n) {
  long long l = 0, r = n - 1;
  while (l != r) {
    if (l < r) {
      long long mid = (l + r) / 2;
      if (v[mid].first > key)
        r = mid;
      else
        l = mid + 1;
    }
  }
  return l;
}
vector<long long> ranks;
vector<long long> parent;
vector<long long> maxim;
void make_set(long long v) {
  parent[v] = v;
  ranks[v] = 0;
}
long long find_Set(long long v) {
  if (parent[v] == v) return v;
  return parent[v] = find_Set(parent[v]);
}
void union_sets(long long a, long long b) {
  a = find_Set(a);
  b = find_Set(b);
  if (a != b) {
    if (ranks[a] < ranks[b]) swap(&a, &b);
    parent[b] = a;
    if (ranks[a] == ranks[b]) ranks[a]++;
  }
}
void dfsutil(long long i, vector<long long> adj[], bool visited[]) {
  visited[i] = true;
  for (long long j = 0; j < adj[i].size(); j++) {
    if (!visited[adj[i][j]]) dfsutil(adj[i][j], adj, visited);
  }
}
long long dfs(vector<long long> adj[], long long present[]) {
  bool visited[26];
  long long count = 0;
  for (long long i = 0; i < 26; i++) visited[i] = false;
  for (long long i = 0; i < 26; i++) {
    if (present[i] && !visited[i]) {
      dfsutil(i, adj, visited);
      count++;
    }
  }
  return count;
}
int32_t main() {
  long long n;
  cin >> n;
  string s;
  cin >> s;
  long long i = 0;
  long long count = 0;
  while (i < s.size()) {
    if (i % 2 == 0) {
      char c = s[i];
      long long j = i + 1;
      while (s[j] == c && j <= s.size()) {
        s.erase(s.begin() + j);
        count++;
      }
      i = j;
    } else
      i++;
  }
  if (s.size() % 2 != 0 && count < n) {
    s.erase(s.end() - 1);
    count++;
  }
  cout << count << "\n";
  cout << s << "\n";
}
