After playing Neo in the legendary "Matrix" trilogy, Keanu Reeves started doubting himself: maybe we really live in virtual reality? To find if this is true, he needs to solve the following problem.Let's call a string consisting of only zeroes and ones good if it contains different numbers of zeroes and ones. For example, 1, 101, 0000 are good, while 01, 1001, and 111000 are not good.We are given a string $$$s$$$ of length $$$n$$$ consisting of only zeroes and ones. We need to cut $$$s$$$ into minimal possible number of substrings $$$s_1, s_2, \ldots, s_k$$$ such that all of them are good. More formally, we have to find minimal by number of strings sequence of good strings $$$s_1, s_2, \ldots, s_k$$$ such that their concatenation (joining) equals $$$s$$$, i.e. $$$s_1 + s_2 + \dots + s_k = s$$$.For example, cuttings 110010 into 110 and 010 or into 11 and 0010 are valid, as 110, 010, 11, 0010 are all good, and we can't cut 110010 to the smaller number of substrings as 110010 isn't good itself. At the same time, cutting of 110010 into 1100 and 10 isn't valid as both strings aren't good. Also, cutting of 110010 into 1, 1, 0010 isn't valid, as it isn't minimal, even though all $$$3$$$ strings are good.Can you help Keanu? We can show that the solution always exists. If there are multiple optimal answers, print any.

The first line of the input contains a single integer $$$n$$$ ($$$1\le n \le 100$$$) — the length of the string $$$s$$$. The second line contains the string $$$s$$$ of length $$$n$$$ consisting only from zeros and ones.

In the first line, output a single integer $$$k$$$ ($$$1\le k$$$) — a minimal number of strings you have cut $$$s$$$ into. In the second line, output $$$k$$$ strings $$$s_1, s_2, \ldots, s_k$$$ separated with spaces. The length of each string has to be positive. Their concatenation has to be equal to $$$s$$$ and all of them have to be good. If there are multiple answers, print any.

NoteIn the first example, the string 1 wasn't cut at all. As it is good, the condition is satisfied.In the second example, 1 and 0 both are good. As 10 isn't good, the answer is indeed minimal.In the third example, 100 and 011 both are good. As 100011 isn't good, the answer is indeed minimal.

using System;
using System.Collections.Generic;

namespace ОлимпПрог1
{

    class Program
    {
        public static bool isGood(string str)
        {
            int flag = 0;
            for(int i =0; i<str.Length; i++)
            {
                if (str[i] == '0')
                    flag--;
                else
                    flag++;
            }
            if (flag == 0)
                return false;
            else
                return true;
        }

        static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());
            string str = Console.ReadLine();
            if (isGood(str) == true)
            {
                Console.WriteLine(1);
                Console.WriteLine(str);
            }
            else
            {
                Console.WriteLine(2);
                string str1 = str.Substring(0, str.Length / 2);
                string str2 = str.Substring(str.Length / 2, str.Length - str.Length / 2);
                if (!isGood(str1))
                {
                    str1 += str2[0];
                    str2 = str2.Remove(0,1);
                }
                Console.Write(str1 + " " + str2);
            }
        }

    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace ConsoleApp2
{
    class Program
    {
        class task: IComparable
        {
            public long type;
            public long t;

            public int CompareTo(object obj)
            {
                task second = (task)obj;
                return second.t.CompareTo(this.t);
            }
        }

        static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());
            string str = Console.ReadLine();
            int CountOne = 0, CountZero = 0;
            for(int i = 0; i < n; i++)
            {
                if (str[i] == '0')
                    CountZero++;
                else
                    CountOne++;
            }
            if(CountZero != CountOne)
            {
                Console.WriteLine(1);
                Console.WriteLine(str);
                return;
            }
            else
            {
                Console.WriteLine(2);
                Console.Write(str[0] + " ");
                Console.Write(str.Substring(1));
            }
        }
    }
}

using System;
using System.Linq;
namespace keanu
{
    class Program
    {
        static void Main(string[] args)
        {
            int len = int.Parse(Console.ReadLine());
            string str = Console.ReadLine();
            int ones_ctr = str.Count(c => c == '1');
            int zrs_ctr = str.Count(c => c == '0');
            if (str.Length % 2 == 1 || ones_ctr != zrs_ctr)
            {
                Console.WriteLine(1);
                Console.WriteLine(str);
                return;
            }
            Console.WriteLine(2);
            Console.WriteLine(str.Substring(0,str.Length-1)+" "+str.Substring(str.Length-1,1));
        }
    }
}

/* Date: 05.07.2019  *  Time: 21:45 */
//
// https://docs.microsoft.com/en-us/dotnet/api/system.tuple-8?redirectedfrom=MSDN&view=netframework-4.7.2
//

/*
�	fflush(stdout) � ����� C++;
�	System.out.flush() � Java;
�	stdout.flush() � Python;
�	flush(output) � Pascal;

*/

using System;
using System.Globalization;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

class Example
{
	public static void Main (string[] args)
	{
# if ( ! ONLINE_JUDGE )
		StreamReader sr = new StreamReader ("C:\\TRR\\2019\\Task\\07 Codeforces\\040\\A.TXT");
		StreamWriter sw = new StreamWriter ("C:\\TRR\\2019\\Task\\07 Codeforces\\040\\OUTPUT.OUT");
# endif

		NumberFormatInfo nfi = NumberFormatInfo.InvariantInfo;

		int n;
		string s;

# if ( ONLINE_JUDGE )
		n = int.Parse (Console.ReadLine ());
		s = (Console.ReadLine ());
# else
		n = int.Parse (sr.ReadLine ());
		sw.WriteLine ("*** n = " + n);
		s = (sr.ReadLine ());
		sw.WriteLine ("*** " + s);
# endif

		int k0 = 0, k1 = 0;
		for ( int i=0; i < n; i++ )
			if ( s [i] == '0' )
				k0++;
			else
				k1++;

# if ( ! ONLINE_JUDGE )
		sw.WriteLine ("*** k0 = " + k0);
		sw.WriteLine ("*** k1 = " + k1);
# endif

# if ( ONLINE_JUDGE )
		if ( k1 != k0 )
		{
			Console.WriteLine ("1");
			Console.WriteLine (s);
		}
		else
		{
			Console.WriteLine ("2");
			Console.Write (s [0] + " ");
			for ( int i=1; i < n; i++ )
				Console.Write (s [i]);
			Console.WriteLine ();
		}
# else
		if ( k1 != k0 )
		{
			sw.WriteLine ("1");
			sw.WriteLine (s);
		}
		else
		{
			sw.WriteLine ("2");
			sw.Write (s [0] + " ");
			for ( int i=1; i < n; i++ )
				sw.Write (s [i]);
			sw.WriteLine ();
		}
# endif

# if ( ! ONLINE_JUDGE )
		sw.Close ();
# endif

	}
}

using System;
 class Kianu
{
    static void Main()
    {
        int a = Convert.ToInt32(Console.ReadLine());
        string s = Console.ReadLine();
        int ed=0, nul=0;
        foreach(char el in s)
        {
            if (el == '1') ed++;
            else if (el == '0') nul++;
        }
        if (ed != nul) Console.WriteLine(1+"\n"+s);
        else
        {
            Console.WriteLine(2);
            for (int i = 0; i < s.Length - 1; i++)
            {
                Console.Write(s[i]);
            }
            Console.WriteLine(" " + s[s.Length - 1]);
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.RegularExpressions;

namespace Contest
{
    class Program
    {
        static void Main(string[] args)
        {
            int n = Convert.ToInt32(Console.ReadLine());
            string s = Console.ReadLine();
            int so0 = 0,so1 = 0;
            for (int i = 0; i < n; i++)
                if (s[i] == '1') so1++;
                else so0++;
            if (so0 == so1)
            {
                Console.WriteLine(2);
                Console.WriteLine(s[0] + " " + s.Substring(1));
            }
            else
            {
                Console.WriteLine(1);
                Console.WriteLine(s);
            }
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Console = System.Console;

namespace ConsoleApp3
{
    public class problemA572
    {
        static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());
            var s = Console.ReadLine();
            int zeroes = 0;
            foreach (var c in s)
            {
                if (c == '0')
                    zeroes++;
            }

            int ones = n - zeroes;
            if (zeroes != ones)
            {
                Console.WriteLine(1);
                Console.WriteLine(s);
            }
            else
            {
                Console.WriteLine(2);
                Console.WriteLine($"{s.Substring(0, n-1)} {s[n-1]}");
            }
        }

    }
}

// Problem: 1189A - Keanu Reeves
// Author: Gusztav Szmolik

using System;

class KeanuReeves
    {
    public static int Main ()
        {
        string line = Console.ReadLine ();
        if (line == null)
            return -1;
        char[] delimiters = new char[] {' ', '\t'};
        string[] words = line.Split (delimiters,StringSplitOptions.RemoveEmptyEntries);
        if (words.Length != 1)
            return -1;
        byte n;
        if (!Byte.TryParse (words[0], out n))
            return -1;
        if (n < 1 || n > 100)
            return -1;
        line = Console.ReadLine ();
        if (line == null)
            return -1;
        words = line.Split (delimiters,StringSplitOptions.RemoveEmptyEntries);
        if (words.Length != 1)
            return -1;
        string s = words[0];
        if (s.Length != n)
            return -1;
        byte countZero = 0;
        for (byte i = 0; i < n; i++)
            {
            char c = s[i];
            if (c != '0' && c != '1')
                return -1;
            if (c == '0')
                countZero++;
            }
        byte countOne = Convert.ToByte (n-countZero);
        if (countZero != countOne)
            {
            Console.WriteLine (1);
            Console.WriteLine (s);
            }
        else
            {
            Console.WriteLine (2);
            Console.WriteLine (s.Substring (0,n-1) + " " + s[n-1]);
            }
        return 0;
        }
    }

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            int n = Convert.ToInt32(Console.ReadLine());
            var q = Console.ReadLine();
            var count = 0;
            foreach (char c in q)
                if (c == '1') count++;
            if(count*2!=q.Length)
            {
                Console.WriteLine(1);
                Console.WriteLine(q);
                return;
            }
            Console.WriteLine(2);
            Console.WriteLine(q[0] +" "+ q.Substring(1, n - 1));
        }
    }
}

using System;
class Program
{
    static void Main()
    {
        int n = int.Parse(Console.ReadLine());
        string s = Console.ReadLine();
        int zero = 0, one = 0;
        if (n % 2 != 0)
            Console.WriteLine(1 + "\n" + s);
        else
        {
            foreach (char c in s)
                switch (c)
                {
                    case '0': zero++; break;
                    case '1': one++; break;
                }
            if (zero == one)
                Console.WriteLine(2 + "\n" + s.Substring(0, n - 1) + " " + s.Substring(n - 1));
            else Console.WriteLine(1 + "\n" + s);
        }
    }
}

using System;
class Program
{
    static void Main()
    {
        int n = int.Parse(Console.ReadLine());
        string s = Console.ReadLine();
        int zero = 0;
        foreach (char c in s)
            if (c == '0')
                zero++;
        if (zero==n-zero)
            Console.WriteLine(2 + "\n" + s.Substring(0, n - 1) + " " + s.Substring(n - 1));
        else Console.WriteLine(1 + "\n" + s);
    }
}

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.CompilerServices;
using static System.Math;
using System.Text;

namespace Program
{
    public static class CODEFORCES1
    {
        static public void Solve()
        {
            var n = NN;
            var s = NS;

            var outlines = new List<string>();
            var startidx = 0;
            while (true)
            {
                var tmp = "";
                var sum = 0;
                var maxtmp = "";
                var maxidx = startidx;
                for (var i = startidx; i < n; i++)
                {
                    sum += s[i] == '0' ? -1 : 1;
                    tmp += s[i];

                    if (sum != 0)
                    {
                        maxtmp = tmp;
                        maxidx = i;
                    }
                }
                if (startidx == n) break;
                outlines.Add(maxtmp);
                startidx = maxidx + 1;
            }
            Console.WriteLine(outlines.Count);
            Console.WriteLine(string.Join(" ", outlines));
        }

        static public void Main(string[] args)
        {
            if (args.Length == 0) { var sw = new StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false }; Console.SetOut(sw); }
            Solve();
            Console.Out.Flush();
        }
        static Random rand = new Random();
        static class Console_
        {
            private static Queue<string> param = new Queue<string>();
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            public static string NextString() { if (param.Count == 0) foreach (var item in Console.ReadLine().Split(' ')) param.Enqueue(item); return param.Dequeue(); }
        }
        static long NN => long.Parse(Console_.NextString());
        static double ND => double.Parse(Console_.NextString());
        static string NS => Console_.NextString();
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        static long[] NNList(long N) => Repeat(0, N).Select(_ => NN).ToArray();
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        static double[] NDList(long N) => Repeat(0, N).Select(_ => ND).ToArray();
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        static string[] NSList(long N) => Repeat(0, N).Select(_ => NS).ToArray();
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        static IEnumerable<T> OrderByRand<T>(this IEnumerable<T> x) => x.OrderBy(_ => rand.Next());
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        static IEnumerable<T> Repeat<T>(T v, long n) => Enumerable.Repeat<T>(v, (int)n);
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        static IEnumerable<int> Range(long s, long c) => Enumerable.Range((int)s, (int)c);
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        static void RevSort<T>(T[] l) where T : IComparable { Array.Sort(l, (x, y) => y.CompareTo(x)); }
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        static void RevSort<T>(T[] l, Comparison<T> comp) where T : IComparable { Array.Sort(l, (x, y) => comp(y, x)); }
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        static IEnumerable<long> Primes(long x) { if (x < 2) yield break; yield return 2; var halfx = x / 2; var table = new bool[halfx + 1]; var max = (long)(Math.Sqrt(x) / 2); for (long i = 1; i <= max; ++i) { if (table[i]) continue; var add = 2 * i + 1; yield return add; for (long j = 2 * i * (i + 1); j <= halfx; j += add) table[j] = true; } for (long i = max + 1; i <= halfx; ++i) if (!table[i] && 2 * i + 1 <= x) yield return 2 * i + 1; }
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        static IEnumerable<long> Factors(long x) { if (x < 2) yield break; while (x % 2 == 0) { x /= 2; yield return 2; } var max = (long)Math.Sqrt(x); for (long i = 3; i <= max; i += 2) while (x % i == 0) { x /= i; yield return i; } if (x != 1) yield return x; }
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        static IEnumerable<long> Divisor(long x) { if (x < 1) yield break; var max = (long)Math.Sqrt(x); for (long i = 1; i <= max; ++i) { if (x % i != 0) continue; yield return i; if (i != x / i) yield return x / i; } }
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        static long GCD(long a, long b) { while (b > 0) { var tmp = b; b = a % b; a = tmp; } return a; }
        static long LCM(long a, long b) => a * b / GCD(a, b);
        class PQ<T> where T : IComparable
        {
            private List<T> h;
            private Comparison<T> c;
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            public PQ(int cap, Comparison<T> c, bool asc = true) { h = new List<T>(cap); this.c = asc ? c : (x, y) => c(y, x); }
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            public PQ(Comparison<T> c, bool asc = true) { h = new List<T>(); this.c = asc ? c : (x, y) => c(y, x); }
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            public PQ(int cap, bool asc = true) : this(cap, (x, y) => x.CompareTo(y), asc) { }
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            public PQ(bool asc = true) : this((x, y) => x.CompareTo(y), asc) { }
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            public void Push(T v) { var i = h.Count; h.Add(v); while (i > 0) { var ni = (i - 1) / 2; if (c(v, h[ni]) >= 0) break; h[i] = h[ni]; i = ni; } h[i] = v; }
            public T Peek => h[0];
            public int Count => h.Count;
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            public T Pop() { var r = h[0]; var v = h[h.Count - 1]; h.RemoveAt(h.Count - 1); if (h.Count == 0) return r; var i = 0; while (i * 2 + 1 < h.Count) { var i1 = i * 2 + 1; var i2 = i * 2 + 2; if (i2 < h.Count && c(h[i1], h[i2]) > 0) i1 = i2; if (c(v, h[i1]) <= 0) break; h[i] = h[i1]; i = i1; } h[i] = v; return r; }
        }
        class PQ<TKey, TValue> where TKey : IComparable
        {
            private PQ<Tuple<TKey, TValue>> q;
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            public PQ(int cap, Comparison<TKey> c, bool asc = true) { q = new PQ<Tuple<TKey, TValue>>(cap, (x, y) => c(x.Item1, y.Item1), asc); }
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            public PQ(Comparison<TKey> c, bool asc = true) { q = new PQ<Tuple<TKey, TValue>>((x, y) => c(x.Item1, y.Item1), asc); }
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            public PQ(int cap, bool asc = true) : this(cap, (x, y) => x.CompareTo(y), asc) { }
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            public PQ(bool asc = true) : this((x, y) => x.CompareTo(y), asc) { }
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            public void Push(TKey k, TValue v) => q.Push(Tuple.Create(k, v));
            public Tuple<TKey, TValue> Peek => q.Peek;
            public int Count => q.Count;
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            public Tuple<TKey, TValue> Pop() => q.Pop();
        }
        struct Mod : IEquatable<object>
        {
            static public long _mod = 1000000007;
            private long _val;
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            public Mod(long x) { if (x < _mod && x >= 0) _val = x; else if ((_val = x % _mod) < 0) _val += _mod; }
            static public implicit operator Mod(long x) => new Mod(x);
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            static public implicit operator long(Mod x) => x._val;
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            static public Mod operator +(Mod x, Mod y) => x._val + y._val;
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            static public Mod operator -(Mod x, Mod y) => x._val - y._val;
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            static public Mod operator *(Mod x, Mod y) => x._val * y._val;
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            static public Mod operator /(Mod x, Mod y) => x._val * Inverse(y._val);
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            static public bool operator ==(Mod x, Mod y) => x._val == y._val;
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            static public bool operator !=(Mod x, Mod y) => x._val != y._val;
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            static public long Inverse(long x) { long b = _mod, r = 1, u = 0, t = 0; while (b > 0) { var q = x / b; t = u; u = r - q * u; r = t; t = b; b = x - q * b; x = t; } return r < 0 ? r + _mod : r; }
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            bool IEquatable<object>.Equals(object obj) => obj == null ? false : Equals((Mod)obj);
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            public override bool Equals(object obj) => obj == null ? false : Equals((Mod)obj);
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            public bool Equals(Mod obj) => obj == null ? false : _val == obj._val;
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            public override int GetHashCode() => _val.GetHashCode();
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            public override string ToString() => _val.ToString();
            static private List<Mod> _fact = new List<Mod>() { 1 };
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            static private void Build(long n) { if (n >= _fact.Count) for (int i = _fact.Count; i <= n; ++i) _fact.Add(_fact[i - 1] * i); }
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            static public Mod Comb(long n, long k) { Build(n); if (n == 0 && k == 0) return 1; if (n < k || n < 0) return 0; return _fact[(int)n] / _fact[(int)(n - k)] / _fact[(int)k]; }
        }
        struct Mat<T>
        {
            private T[,] m;
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            public Mat(T[,] v) { m = (T[,])v.Clone(); }
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            static public implicit operator Mat<T>(T[,] v) => new Mat<T>(v);
            public T this[int r, int c] { get { return m[r, c]; } set { m[r, c] = value; } }
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            static public Mat<T> operator +(Mat<T> a, T x) { var tm = (T[,])a.m.Clone(); for (int r = 0; r < tm.GetLength(0); ++r) for (int c = 0; c < tm.GetLength(1); ++c) tm[r, c] += (dynamic)x; return tm; }
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            static public Mat<T> operator +(Mat<T> a, Mat<T> b) { var tm = (T[,])a.m.Clone(); for (int r = 0; r < tm.GetLength(0); ++r) for (int c = 0; c < tm.GetLength(1); ++c) tm[r, c] += (dynamic)b[r, c]; return tm; }
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            static public Mat<T> operator -(Mat<T> a, T x) { var tm = (T[,])a.m.Clone(); for (int r = 0; r < tm.GetLength(0); ++r) for (int c = 0; c < tm.GetLength(1); ++c) tm[r, c] -= (dynamic)x; return tm; }
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            static public Mat<T> operator -(Mat<T> a, Mat<T> b) { var tm = (T[,])a.m.Clone(); for (int r = 0; r < tm.GetLength(0); ++r) for (int c = 0; c < tm.GetLength(1); ++c) tm[r, c] -= (dynamic)b[r, c]; return tm; }
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            static public Mat<T> operator *(Mat<T> a, T x) { var tm = (T[,])a.m.Clone(); for (int r = 0; r < tm.GetLength(0); ++r) for (int c = 0; c < tm.GetLength(1); ++c) tm[r, c] *= (dynamic)x; return tm; }
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            static public Mat<T> operator *(Mat<T> a, Mat<T> b) { var nr = a.m.GetLength(0); var nc = b.m.GetLength(1); var tm = new T[nr, nc]; for (int i = 0; i < nr; ++i) for (int j = 0; j < nc; ++j) tm[i, j] = (dynamic)0; for (int r = 0; r < nr; ++r) for (int c = 0; c < nc; ++c) for (int i = 0; i < a.m.GetLength(1); ++i) tm[r, c] += a[r, i] * (dynamic)b[i, c]; return tm; }
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            static public Mat<T> Pow(Mat<T> x, long y) { var n = x.m.GetLength(0); var t = (Mat<T>)new T[n, n]; for (int i = 0; i < n; ++i) for (int j = 0; j < n; ++j) t[i, j] = (dynamic)(i == j ? 1 : 0); while (y != 0) { if ((y & 1) == 1) t *= x; x *= x; y >>= 1; } return t; }
        }
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        static Mat<T> Pow<T>(Mat<T> x, long y) => Mat<T>.Pow(x, y);
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        static T Pow<T>(T x, long y) { T a = (dynamic)1; while (y != 0) { if ((y & 1) == 1) a *= (dynamic)x; x *= (dynamic)x; y >>= 1; } return a; }
        static List<long> _fact = new List<long>() { 1 };
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        static void _Build(long n) { if (n >= _fact.Count) for (int i = _fact.Count; i <= n; ++i) _fact.Add(_fact[i - 1] * i); }
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        static long Comb(long n, long k) { _Build(n); if (n == 0 && k == 0) return 1; if (n < k || n < 0) return 0; return _fact[(int)n] / _fact[(int)(n - k)] / _fact[(int)k]; }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace KianuRivz
{
    class Class1
    {
        static void Main()
        {
            int ed = 0 , nol = 0;
            int n = Convert.ToInt32(Console.ReadLine());
            string s = Console.ReadLine();
            for (int i = 0; i < s.Length; i++) if (s[i] == '1') ed++; else nol++;
            if (ed != nol) Console.WriteLine($"1\n{s}");
            if (ed == nol)
            {
                Console.WriteLine("2");
                Console.Write(s.Substring(0, s.Length - 1));
                Console.Write($" {s[s.Length - 1]}");
            }
            }
    }
}

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            #region
            //string str = Console.ReadLine();
            //string[] s = str.Split(" ");
            //int n = Convert.ToInt32(s[0]);
            //int k = Convert.ToInt32(s[1]);

            //int time = 240 - k;
            //int i;
            //for (i = 1; i <= n; i++)
            //{
            //    int task = i * 5;
            //    if (time - task < 0)
            //    {
            //        break;
            //    }

            //    else
            //    {
            //        time -= task;

            //    }
            //}
            //i--;
            //Console.WriteLine(i);
            #endregion

            #region
            //string str = Console.ReadLine();
            //string[] s = str.Split(' ');
            //int N = Convert.ToInt32(s[0]);
            //int M = Convert.ToInt32(s[1]);

            //if (N < 200 || M < N)
            //{
            //    int K = N - M;
            //    K++;
            //    Console.WriteLine(K);
            //}
            #endregion

            #region
            //string s = Console.ReadLine();
            //var a = s.Count(c => c == 'a');
            //var res = a - 1;
            //Console.WriteLine(Math.Min(s.Length, res + a));

            //int n = Convert.ToInt32(Console.ReadLine());
            //int k = 0;
            //for (int i = 1; i < n; i++)
            //{
            //    if (n % i == 0)
            //        k++;
            //}
            //Console.WriteLine(k);
            #endregion

            #region
            //string str = Console.ReadLine();
            //string[] s = str.Split(' ');

            //int a = Convert.ToInt32(s[0]);
            //int b = Convert.ToInt32(s[1]);
            //int i = 0;
            //while (a <= b)
            //{
            //    a *= 3;
            //    b *= 2;
            //    i++;
            //}
            //Console.WriteLine(i);
            #endregion

            #region
            //string str = Console.ReadLine();
            //string[] s = str.Split(' ');

            //int n = Convert.ToInt32(s[0]);
            //int m = Convert.ToInt32(s[1]);
            //int k = Convert.ToInt32(s[2]);

            //if (m < n || k < n)
            //{
            //    Console.WriteLine("No");
            //}
            //else
            //{
            //    Console.WriteLine("Yes");
            //}
            #endregion

            #region
            //string str = Console.ReadLine();
            //string[] s = str.Split(' ');
            //int t = Convert.ToInt32(str);

            //string a = "I hate";
            //string b = " that I love";
            //string c = " that I hate";

            //for (int i = 0; i < t-1; i++)
            //{
            //    if (i % 2 == 1)
            //    {
            //        a += c;
            //    }
            //    else if( i % 2 == 0)
            //    {
            //        a += b;
            //    }
            //}
            //    Console.WriteLine($"{a} it");
            #endregion

            #region
            //int n = Convert.ToInt32(Console.ReadLine());
            //int a = n % 2;
            //if (a == 0)
            //{
            //    Console.WriteLine("Mahmoud");
            //}
            //else
            //{
            //    Console.WriteLine("Ehab");
            //}
            #endregion

            #region
            //string str = Console.ReadLine();
            //string[] s = str.Split(' ');

            //int n = Convert.ToInt32(s[0]);
            //int k = Convert.ToInt32(s[1]);

            //int count = 0;
            //while (count < k)
            //{
            //    if (n % 10 == 0)
            //    {
            //        n = n / 10;
            //    }
            //    else
            //    {
            //        n = n - 1;
            //    }
            //    count++;
            //}
            //Console.WriteLine(n);
            #endregion

            #region
            //string[] s = Console.ReadLine().Split(' ');
            //int x = int.Parse(s[0]);
            //int y = int.Parse(s[1]);
            //int z = int.Parse(s[2]);

            //if ((x + y >= z) && (y + z >= x) && (x + z >= y))
            //{
            //    Console.WriteLine("YES");
            //}
            //else
            //{
            //    Console.WriteLine("NO");
            //}
            #endregion

            #region
            //int x = Convert.ToInt32(Console.ReadLine());

            //    int count = 0;

            //    count += x / 100;
            //    x %= 100;
            //    count += x / 20;
            //    x %= 20;
            //    count += x / 10;
            //    x %= 10;
            //    count += x / 5;
            //    x %= 5;
            //    count += x;

            //Console.WriteLine(count);
            #endregion

            #region
            //int n = Convert.ToInt32(Console.ReadLine());
            //for (int i = 0; i < n; i++)
            //{
            //    string str = Console.ReadLine();
            //    if (str.EndsWith("desu") || str.EndsWith("masu"))
            //    {
            //        Console.WriteLine("JAPANESE");
            //    }
            //    else if (str.EndsWith("mnida"))
            //    {
            //        Console.WriteLine("KOREAN");
            //    }
            //    else if (str.EndsWith("po"))
            //    {
            //        Console.WriteLine("FILIPINO");
            //    }
            //}
            #endregion

            #region
            //string str = Console.ReadLine();
            //string[] s = str.Split(' ');
            //int N = Convert.ToInt32(s[0]);
            //int K = Convert.ToInt32(s[1]);

            //int a = N * 2 / K;
            //int b = N * 5 / K;
            //int c = N * 8 / K;

            //int sum = a + b + c;

            //if (N * 2 % K != 0)
            //    sum++;

            //if (N * 5 % K != 0)
            //    sum++;

            //if (N * 8 % K != 0)
            //    sum++;

            //Console.WriteLine(sum);
            #endregion

            #region
            //int n = Convert.ToInt32(Console.ReadLine());

            //for(int i = 0; i < n; i++)
            //{
            //    string str = Console.ReadLine();
            //    string[] s = str.Split(' ');
            //    int k = Convert.ToInt32(s[0]);
            //    int t = Convert.ToInt32(s[1]);

            //    if(k < 24 || t < 60)
            //    {
            //        int c = 24 - k;
            //        int b = 60 - t;

            //        int v = 0;

            //        if(c == 1)
            //        {
            //           v = b;
            //        }
            //        else
            //        {
            //            v = c * 60 - t;
            //        }

            //        Console.WriteLine(v);
            //    }
            //}
            #endregion

            #region
            //int n = Convert.ToInt32(Console.ReadLine());

            //for(int i = 3; i == n; i++)
            //{
            //    string str = Console.ReadLine();
            //    string[] s = str.Split(' ');
            //    int a = Convert.ToInt32(s[0]);
            //    int b = Convert.ToInt32(s[1]);
            //    int c = Convert.ToInt32(s[2]);

            //    if(a < 2 || b < 2 || c < 2)
            //    {
            //        Console.WriteLine("NO");
            //    }
            //    else
            //    {
            //        Console.WriteLine("YES");
            //    }
            //}
            #endregion

            #region
            //int n = Convert.ToInt32(Console.ReadLine());

            //if(n >= 4 || n <= 1000)
            //{
            //    int v = n / 2;
            //    Console.WriteLine(v);
            //}
            #endregion

            #region
            /* int t = Convert.ToInt32(Console.ReadLine());

             while (--t >= 0)
             {
                 int n = Convert.ToInt32(Console.ReadLine()); ;
                 string str = Console.ReadLine();
                 int max = 0;
                 int m = 0;
                 var hasAngry = false;
                 for (var i = 0; i < n; i++)
                 {
                     if (str[i] == 'A')
                     {
                         hasAngry = true;
                         m = 0;
                     }
                     else if (str[i] == 'P' && hasAngry)
                     {
                         m++;
                     }

                     if (m > max)
                         max = m;
                 }
                 Console.WriteLine(max);

             }*/
            #endregion

            #region
            /* string str = Console.ReadLine();
             string[] s = str.Split(" ");
             int k2 = Convert.ToInt32(s[0]);
             int k3 = Convert.ToInt32(s[1]);
             int k5 = Convert.ToInt32(s[2]);
             int k6 = Convert.ToInt32(s[3]);

             int r = 0;

             if (k2 <= k5 && k2 <= k6)
             {
                 r = 256 * k2;
                 k2 = 0;
             }
             else if (k5 <= k2 && k5 <= k6)
             {
                 r = 256 * k5;
                 k2 -= k5;
             }
             else if (k6 <= k2 && k6 <= k5)
             {
                 r = 256 * k6;
                 k2 -= k6;
             }

             if (k2 > 0)
             {
                 if (k3 > k2)
                 {
                     r += 32 * k2;
                 }
                 else
                 {
                     r += 32 * k3;
                 }
             }
             Console.WriteLine(r);*/
            #endregion

            #region
            int n = Convert.ToInt32(Console.ReadLine()); //Киану Ривз
            string s = Console.ReadLine();
            int a = 0;
            int b = 0;
            foreach (char el in s)
            {
                if (el == '1')
                    a++;
                else if (el == '0')
                    b++;
            }
            if (a != b)
                Console.WriteLine(1 + "\n" + s);
            else
            {
                Console.WriteLine(2);
                for (int i = 0; i < s.Length - 1; i++)
                {
                    Console.Write(s[i]);
                }
                Console.WriteLine(" " + s[s.Length - 1]);
            }
            #endregion
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var n = int.Parse(Console.ReadLine());
            var s = Console.ReadLine();
            var cnt0 = 0;
            var cnt1 = 0;
            for (int i = 0; i < n; i++)
            {
                if (s[i] == '0')
                    cnt0++;
                else
                    cnt1++;
            }

            if (cnt0 != cnt1)
            {
                Console.WriteLine(1);
                Console.WriteLine(s);
                return;
            }

            var sb = new StringBuilder();
            var p = 0;
            var cur0 = 0;
            var cur1 = 0;
            for (p = 0; p < n; p++)
            {
                sb.Append(s[p]);
                if (s[p] == '0')
                {
                    cnt0--;
                    cur0++;
                }
                else
                {
                    cnt1--;
                    cur1++;
                }
                if (cnt0 != cnt1 && cur0 != cur1)
                {
                    p++;
                    break;
                }
            }

            var s1 = sb.ToString();
            sb.Clear();
            for (; p < n; p++)
                sb.Append(s[p]);
            var s2 = sb.ToString();
            Console.WriteLine(2);
            Console.WriteLine(s1+" "+s2);
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DailyCP
{
    public class cf_572_1
    {
        static void Main(string[] args)
        {
            var obje = new cf_572_1();
            obje.Solve();
        }

        public void Solve()
        {
            int leng = Convert.ToInt32(Console.ReadLine());
            string value = Console.ReadLine();
            Queue<int> breaks = new Queue<int>();
            int lkup = -1;
            while (true)
            {
                int s = lkup+1;
                int onesTillNow = 0;
                for (int i = s; i < value.Length; i++)
                {
                    if (value[i] == '1')
                    {
                        onesTillNow++;
                    }

                    if (onesTillNow != ((i-s) - onesTillNow + 1))
                    {
                        lkup = i;
                    }
                }
                breaks.Enqueue(lkup);
                if (lkup == value.Length - 1)
                {
                    break;
                }
            }
            Console.WriteLine(breaks.Count);
            while (breaks.Count > 0)
            {
                int b = breaks.Dequeue();
                for(int j=0;j<value.Length;j++)
                {
                    Console.Write(value[j]);
                    if (j==b && j!= value.Length-1)
                    {
                        Console.Write(' ');
                        if (breaks.Count > 0)
                        {
                            b = breaks.Dequeue();
                        }
                    }
                }
            }
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Task_01
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.ReadLine();
            var s = Console.ReadLine() ?? "";

            if (s.Length % 2 == 1)
            {
                Console.WriteLine(1);
                Console.WriteLine(s);
                return;
            }

            var zeroCount = s.Count(ch => ch == '0');
            if (zeroCount != s.Length /2)
            {
                Console.WriteLine(1);
                Console.WriteLine(s);
                return;
            }
            else
            {
                Console.WriteLine(2);
                Console.WriteLine(s.Substring(0, s.Length - 1) + " " + s.Substring(s.Length - 1));
                return;
            }
        }
    }
}

using System;

namespace testProject
{
    class Program
    {
        static void Main(string[] args)
        {
            int sum = 0;
            for (int i = 1; i <= 31; i++)
                sum += i;

            string lengthOfInput = Console.ReadLine();
            string input = Console.ReadLine();

            var inputChars = input.ToCharArray();
            int numberdifference = 0;
            for(int i = 0; i<input.Length; i++)
            {
                if (inputChars[i].ToString().Equals("0")) numberdifference++;
                else numberdifference--;
            }
            if (numberdifference == 0)
            {
                //ist schlecht
                Console.WriteLine(2);
                Console.WriteLine(input.Remove(1) + " " + input.Substring(1));
            }
            else
            {
                //ist gut
                Console.WriteLine(1);
                Console.WriteLine(input);
            }
        }
    }
}

using System;
using static System.Console;

namespace AAAcs
{
    class Program
    {
        static void Main(string[] args)
        {
            int n = Convert.ToInt32(ReadLine());
            string s = ReadLine();

            if (n % 2 == 1)
            {
                WriteLine(1);
                WriteLine(s);
                return;
            }

            int k = 0;
            for (int i = 0; i < n; i++)
                k += s[i] == '1' ? 1 : -1;

            if (k != 0)
            {
                WriteLine(1);
                WriteLine(s);
                return;
            }

            WriteLine(2);
            WriteLine(s[0].ToString() + " " + s.Substring(1));
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using CompLib.Util;
using System.Threading;

public class Program
{
    public void Solve()
    {
        var sc = new Scanner();
        int n = sc.NextInt();
        string s = sc.Next();

        int cnt0 = s.Count(ch => ch == '0');
        int cnt1 = n - cnt0;

        if (cnt0 != cnt1)
        {
            Console.WriteLine(1);
            Console.WriteLine(s);
            return;
        }

        Console.WriteLine(2);
        Console.WriteLine($"{s[0]} {s.Substring(1)}");
    }

    public static void Main(string[] args) => new Program().Solve();
    // public static void Main(string[] args) => new Thread(new Program().Solve, 1 << 27).Start();
}

namespace CompLib.Util
{
    using System;
    using System.Linq;

    class Scanner
    {
        private string[] _line;
        private int _index;
        private const char Separator = ' ';

        public Scanner()
        {
            _line = new string[0];
            _index = 0;
        }

        public string Next()
        {
            if (_index >= _line.Length)
            {
                string s;
                do
                {
                    s = Console.ReadLine();
                } while (s.Length == 0);

                _line = s.Split(Separator);
                _index = 0;
            }

            return _line[_index++];
        }

        public string ReadLine()
        {
            _index = _line.Length;
            return Console.ReadLine();
        }

        public int NextInt() => int.Parse(Next());
        public long NextLong() => long.Parse(Next());
        public double NextDouble() => double.Parse(Next());
        public decimal NextDecimal() => decimal.Parse(Next());
        public char NextChar() => Next()[0];
        public char[] NextCharArray() => Next().ToCharArray();

        public string[] Array()
        {
            string s = Console.ReadLine();
            _line = s.Length == 0 ? new string[0] : s.Split(Separator);
            _index = _line.Length;
            return _line;
        }

        public int[] IntArray() => Array().Select(int.Parse).ToArray();
        public long[] LongArray() => Array().Select(long.Parse).ToArray();
        public double[] DoubleArray() => Array().Select(double.Parse).ToArray();
        public decimal[] DecimalArray() => Array().Select(decimal.Parse).ToArray();
    }
}

using System;
using System.Linq;
using System.Text;

namespace codeforce572div2
{
    class Program
    {
        static void Main(string[] args)
        {
            int n = Convert.ToInt32(Console.ReadLine());
            string str = Console.ReadLine();
            int[] A = str.ToArray().Select(x => x - '0').ToArray();
            int[] acc = new int[n + 1];
            for (int i = 1; i <= n; ++i)
                acc[i] = acc[i - 1] + A[i - 1];

            if (n % 2 == 1 || acc[n] != n / 2 || n == acc[n] || acc[n] == 0)
            {
                Console.WriteLine("1" + Environment.NewLine + str);
                return;
            }

            for (int i = 1; i <= n; ++i)
                if (Check(acc[i], i) && Check(acc[n] - acc[i], n - i))
                {
                    Console.WriteLine("2" + Environment.NewLine + str.Substring(0, i) + " " + str.Substring(i, n - i));
                    return;
                }

        }

        private static bool Check(int n, int l)
        {
            return l % 2 == 1 || n == l || n == 0 || n != l / 2;
        }
    }
}

using System;
using System.Linq;

namespace codeforces
{

    class Program
    {
        static void Main(string[] args)
        {
            int c1 = int.Parse(Console.ReadLine());
            string s = Console.ReadLine();
            if (s.Count(x=>x=='1')==s.Count(x=>x=='0'))
                Console.WriteLine("2\n"+s.Remove(s.Length-1,1)+" "+s[s.Length-1]);
            else
                Console.WriteLine("1\n" + s);

        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using static System.Console;
using static System.Math;

class Program
{
    static void Main()
    {
        var N = int.Parse(ReadLine());
        var s = ReadLine();
        var c = s.Count(x => x == '0');
        if (c == 0 || c == N)
        {
            WriteLine(1);
            WriteLine(s);
            return;
        }
        if (N-c!=c)
        {
            WriteLine(1);
            WriteLine(s);
            return;
        }
        if (s.Skip(1).Count(x => x == '0') == s.Skip(1).Count(x => x == '1'))
        {
            WriteLine(2);
            WriteLine(s.Substring(0, 2) + " " + s.Substring(2));
        }
        else
        {
            WriteLine(2);
            WriteLine(s.Substring(0, 1) + " " + s.Substring(1));
        }
    }
}

using System;
using System.Linq;
using CompLib.Util;

public class Program
{
    public void Solve()
    {
        var sc = new Scanner();
        int n = sc.NextInt();
        string s = sc.Next();
        int cnt1 = s.Count(c => c == '1');
        int cnt0 = n - cnt1;
        if (cnt1 == cnt0)
        {
            Console.WriteLine(2);
            Console.WriteLine($"{s[0]} {s.Substring(1)}");
        }
        else
        {
            Console.WriteLine(1);
            Console.WriteLine(s);
        }
    }

    public static void Main(string[] args) => new Program().Solve();
}

namespace CompLib.Util
{
    using System;
    using System.Linq;

    class Scanner
    {
        private string[] _line;
        private int _index;
        private const char Separator = ' ';

        public Scanner()
        {
            _line = new string[0];
            _index = 0;
        }

        public string Next()
        {
            if (_index >= _line.Length)
            {
                string s;
                do
                {
                    s = Console.ReadLine();
                } while (s.Length == 0);

                _line = s.Split(Separator);
                _index = 0;
            }

            return _line[_index++];
        }

        public string ReadLine()
        {
            _index = _line.Length;
            return Console.ReadLine();
        }

        public int NextInt() => int.Parse(Next());
        public long NextLong() => long.Parse(Next());
        public double NextDouble() => double.Parse(Next());
        public decimal NextDecimal() => decimal.Parse(Next());
        public char NextChar() => Next()[0];
        public char[] NextCharArray() => Next().ToCharArray();

        public string[] Array()
        {
            string s = Console.ReadLine();
            _line = s.Length == 0 ? new string[0] : s.Split(Separator);
            _index = _line.Length;
            return _line;
        }

        public int[] IntArray() => Array().Select(int.Parse).ToArray();
        public long[] LongArray() => Array().Select(long.Parse).ToArray();
        public double[] DoubleArray() => Array().Select(double.Parse).ToArray();
        public decimal[] DecimalArray() => Array().Select(decimal.Parse).ToArray();
    }
}

using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
using static System.Array;
using static System.Console;
using static System.Math;

namespace Olymp
{
  public class ProblemSolver
  {
    private readonly Tokenizer input;

    public void Solve()
    {
      var n = input.ReadInt();
      var s = input.ReadToken();
      var z = s.Count(c => c == '0');
      if (n % 2 == 1 || z != n - z)
      {
        WriteLine(1);
        WriteLine(s);
      }
      else
      {
        WriteLine(2);
        WriteLine($"{s[0]} {s.Substring(1)}");
      }
    }

    public ProblemSolver(TextReader input)
    {
      this.input = new Tokenizer(input);
    }
  }

  #region Service classes

  public class Tokenizer
  {
    private readonly TextReader reader;

    public string ReadToEnd() => reader.ReadToEnd();

    public int ReadInt()
    {
      var c = SkipWs();
      if (c == -1)
        throw new EndOfStreamException();
      var isNegative = false;
      if (c == '-' || c == '+')
      {
        isNegative = c == '-';
        c = reader.Read();
        if (c == -1)
          throw new EndOfStreamException("Digit expected, but end of stream occurs");
      }

      if (!char.IsDigit((char)c))
        throw new InvalidOperationException($"Digit expected, but was: '{(char)c}'");

      checked
      {
        var result = (char)c - '0';
        c = reader.Read();
        while (c > 0 && !char.IsWhiteSpace((char)c))
        {
          if (!char.IsDigit((char)c))
            throw new InvalidOperationException($"Digit expected, but was: '{(char)c}'");
          result = result * 10 + (char)c - '0';
          c = reader.Read();
        }

        if (isNegative)
          result = -result;
        return result;
      }
    }

    public string ReadLine() => reader.ReadLine();

    public long ReadLong() => long.Parse(ReadToken());

    public double ReadDouble() => double.Parse(ReadToken(), CultureInfo.InvariantCulture);

    public int[] ReadIntArray(int n)
    {
      var a = new int[n];
      for (var i = 0; i < n; i++)
        a[i] = ReadInt();
      return a;
    }

    public (int, int) Read2Int() => (ReadInt(), ReadInt());

    public (int, int, int) Read3Int() => (ReadInt(), ReadInt(), ReadInt());

    public (int, int, int, int) Read4Int() => (ReadInt(), ReadInt(), ReadInt(), ReadInt());

    public (long, long) Read2Long() => (ReadLong(), ReadLong());

    public long[] ReadLongArray(int n)
    {
      var a = new long[n];
      for (var i = 0; i < n; i++)
        a[i] = ReadLong();
      return a;
    }

    public double[] ReadDoubleArray(int n)
    {
      var a = new double[n];
      for (var i = 0; i < n; i++)
        a[i] = ReadDouble();
      return a;
    }

    public string ReadToken()
    {
      var c = SkipWs();
      if (c == -1)
        return null;
      var sb = new StringBuilder();
      while (c > 0 && !char.IsWhiteSpace((char)c))
      {
        sb.Append((char)c);
        c = reader.Read();
      }

      return sb.ToString();
    }

    private int SkipWs()
    {
      var c = reader.Read();
      if (c == -1)
        return c;
      while (c > 0 && char.IsWhiteSpace((char)c))
        c = reader.Read();
      return c;
    }

    public Tokenizer(TextReader reader)
    {
      this.reader = reader;
    }
  }

  internal class Program
  {
    public static void Main()
    {
      var solver = new ProblemSolver(In);
      solver.Solve();
    }
  }

  #endregion
}

using System;
using System.Linq;
class Program
{
    static void Main()
    {
        Console.ReadLine();
        var s = Console.ReadLine();
        if (s.Count(x => x == '0') * 2 == s.Length)
            Console.WriteLine($"2\r\n{s[0]} {s.Substring(1)}");
        else
            Console.WriteLine($"1\r\n{s}");
    }
}

using System;
using System.Linq;
using System.Threading;
using static System.Console;
class Solution
{
    static void Main(string[] args)
    {
        int a = Convert.ToInt32(ReadLine());
        string b = ReadLine();
        solve(b);
    }
    public static void solve(string b)
    {
        int c = b.Count(x => x == '0');
        int d = b.Count(x => x == '1');
        if (c != d)
        {
            WriteLine(1);
            WriteLine(b);
        }
        else
        {
            WriteLine(2);
            string z = b.Substring(0, 1);
            string x = b.Substring(1, b.Length-1);
            WriteLine($"{z} {x}");
        }

    }
}

using System;

namespace Codeforces
{
    class Program
    {
        static void Main(string[] args)
        {
            var n = int.Parse(Console.ReadLine());
            var s = Console.ReadLine();

            var zeroes = 0;
            for (var i = 0; i < n; i++)
                if (s[i] == '0')
                    zeroes++;

            Console.WriteLine(n - zeroes != zeroes ? $"1 {s}" : $"2 {s.Substring(0, n - 1)} {s[n - 1]}");
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Testerka
{
    class Program
    {
        static void Main(string[] args)
        {
            int i0 = 0;
            int i1 = 0;
            string s;
            List<string> answer = new List<string>();
            Console.ReadLine();
            s = Console.ReadLine();

            foreach (char c in s)
            {
                if (c == '0')
                {
                    i0++;
                }
                else
                {
                    i1++;
                }
            }
            if (i0 == i1)
            {
                Console.WriteLine(2);
                Console.Write(s[0]);
                Console.Write(" ");
                for (int i = 1; i < s.Length; ++i)
                    Console.Write(s[i]);

            }
            else
            {
                Console.WriteLine(1);
                Console.Write(s);
            }

        }

    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {

             int n=int.Parse(Console.ReadLine());
             string s=Console.ReadLine();
             int x=0;
             int z=0;
             int o=0;
             for(int i=0;i<n;i++)
             {
             if(s[i]=='0')
             z++;
             else
             o++;
             }
             if(z==o)
             {
             for(int i=0;i<n;i++)
             {
                  //bool f=false;
                  int zero=0;
                  int one=0;
                  for(int j=0;j<i;j++)
                  {
                       if(s[i]=='0')
                       zero++;
                       else
                       one++;

                  }
                  if(zero!=one)
                  {
                       zero=0;
                       one=0;
                       for(int j=i;j<n;j++)
                  {
                       if(s[i]=='0')
                       zero++;
                       else
                       one++;

                  }
                  }
                  if(zero!=one)
                  {
                       x=i;
                       break;
                  }

             }
             if(x>0)
             {
                  Console.WriteLine(2);
             for(int i=0;i<x;i++)
             Console.Write(s[i]);
             Console.Write(" ");
             for(int i=x;i<n;i++)
             Console.Write(s[i]);
             }
             else
             {
                  Console.WriteLine(1);

             Console.WriteLine(s);
             }
             }
             else
             {
                  Console.WriteLine(1);
                  Console.WriteLine(s);
             }
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using static System.Console;
using static System.Convert;
using static System.Math;
//using Debug;
//using static System.Globalization.CultureInfo;
using System.Text;
class Program
{
    static void Main(string[] args)
    {
        var sw = new StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false };
        Console.SetOut(sw);
        Solve();
        Console.Out.Flush();
        //WriteLine(Solve());
    }
    static void Solve()
    {
        var num = Input.num;
        var str = ReadLine();
        if (str.Count(v => v == '1') == str.Count(v => v == '0'))
            WriteLine($"2\n{new string(str.Take(1).ToArray())} {new string(str.Skip(1).ToArray())}");
        else WriteLine($"1\n{str}");
    }
}

public class Input
{
    public static string read => ReadLine().Trim();
    public static int[] ar => read.Split(' ').Select(int.Parse).ToArray();
    public static int num => ToInt32(read);
    public static long[] arL => read.Split(' ').Select(long.Parse).ToArray();
    public static long numL => ToInt64(read);
    public static char[][] gred(int h)
        => Enumerable.Repeat(0, h).Select(_ => read.ToCharArray()).ToArray();
    public static int[] ar1D(int n)
        => Enumerable.Repeat(0, n).Select(_ => num).ToArray();
    public static long[] arL1D(int n)
        => Enumerable.Repeat(0, n).Select(_ => numL).ToArray();
    public static string[] strs(int n)
        => Enumerable.Repeat(0, n).Select(_ => read).ToArray();
    public static int[][] ar2D(int n)
        => Enumerable.Repeat(0, n).Select(_ => ar).ToArray();
    public static long[][] arL2D(int n)
        => Enumerable.Repeat(0, n).Select(_ => arL).ToArray();
    public static List<T>[] edge<T>(int n)
        => Enumerable.Repeat(0, n).Select(_ => new List<T>()).ToArray();
    public static T getValue<T>(string g)
    {
        var t = typeof(T);
        if (t == typeof(int))
            return (T)(object)int.Parse(g);
        if (t == typeof(long))
            return (T)(object)long.Parse(g);
        if (t == typeof(string))
            return (T)(object)g;
        if (t == typeof(char))
            return (T)(object)char.Parse(g);
        if (t == typeof(double))
            return (T)(object)double.Parse(g);
        if (t == typeof(bool))
            return (T)(object)bool.Parse(g);
        return default(T);
    }
    public static void Make<T1, T2>(out T1 v1, out T2 v2)
    {
        v1 = Next<T1>();
        v2 = Next<T2>();
    }
    public static void Make<T1, T2, T3>(out T1 v1, out T2 v2, out T3 v3)
    {
        Make(out v1, out v2);
        v3 = Next<T3>();
    }
    public static void Make<T1, T2, T3, T4>(out T1 v1, out T2 v2, out T3 v3, out T4 v4)
    {
        Make(out v1, out v2, out v3);
        v4 = Next<T4>();
    }
    public static void Make<T1, T2, T3, T4, T5>(out T1 v1, out T2 v2, out T3 v3, out T4 v4, out T5 v5)
    {
        Make(out v1, out v2, out v3, out v4);
        v5 = Next<T5>();
    }
    private static Queue<string> sc = new Queue<string>();
    public static T Next<T>(){ if (sc.Count == 0) foreach (var item in read.Split(' ')) sc.Enqueue(item);return getValue<T>(sc.Dequeue()); }
    public const long Inf = (long)1e18;
    public const double eps = 1e-6;
    public const string Alfa = "abcdefghijklmnopqrstuvwxyz";
    public const int MOD = 1000000007;
}

// you can also use other imports, for example:
// using System.Collections.Generic;

// you can write to stdout for debugging purposes, e.g.
// Console.WriteLine("this is a debug message");

using System;
using System.Linq;

internal class Solution
{
    private static void Main(string[] args)
    {
        var n = int.Parse(Console.ReadLine());
        var str = Console.ReadLine();

        var arr = new int[2];

        foreach (var item in str)
        {
            if (item == '1')
            {
                arr[1]++;
            }
            else
            {
                arr[0]++;
            }
        }

        if (arr[1] != arr[0])
        {
            Console.WriteLine(1.ToString());
            Console.WriteLine(str);
        }
        else
        {
            Console.WriteLine(2.ToString());
            Console.WriteLine(str.Substring(0, str.Length - 1) + " " + str[str.Length - 1]);
        }

        Console.ReadLine();
    }

}

using System;

public class Program
{
	public static void Main()
	{
		Console.ReadLine();
	    string s = Console.ReadLine();
		int count = 0;
		for(int i = 0 ; i < s.Length; i++)
		{
			if (s[i] == '1') count++;
			if (s[i] == '0') count--;
		}
		if(count == 0)
		{
			Console.WriteLine(2);
			Console.WriteLine("{0} {1}", s[0], s.Substring(1));
		}
		else
		{
			Console.WriteLine(1);
			Console.WriteLine(s);
		}
	}
}

using System;
using System.IO;
using System.Linq;
using System.Text;

namespace Keanu_Reeves
{
    internal class Program
    {
        private static readonly StreamReader reader = new StreamReader(Console.OpenStandardInput(1024*10), Encoding.ASCII, false, 1024*10);
        private static readonly StreamWriter writer = new StreamWriter(Console.OpenStandardOutput(1024*10), Encoding.ASCII, 1024*10);

        private static void Main(string[] args)
        {
            Solve(args);
            writer.Flush();
        }

        private static void Solve(string[] args)
        {
            string s = reader.ReadLine();
            s = reader.ReadLine();

            if (s.Length == s.Count(t => t == '1')*2)
            {
                writer.WriteLine("2");
                writer.Write(s[0]);
                writer.Write(' ');
                writer.WriteLine(s.Substring(1));
            }
            else
            {
                writer.WriteLine("1");
                writer.WriteLine(s);
            }
        }

        private static int Next()
        {
            int c;
            int res = 0;
            do
            {
                c = reader.Read();
                if (c == -1)
                    return res;
            } while (c < '0' || c > '9');
            res = c - '0';
            while (true)
            {
                c = reader.Read();
                if (c < '0' || c > '9')
                    return res;
                res *= 10;
                res += c - '0';
            }
        }
    }
}

using System;

namespace Keanu_Reeves
{
    class Program
    {
        static void Main(string[] args)
        {
            int n = Convert.ToInt32(Console.ReadLine());
            string s = Console.ReadLine();
            int count0 = 0;
            int count1 = 0;
            for (int i = 0; i < n; i++)
            {
                if (s[i] == '0')
                {
                    count0++;
                }
                else
                {
                    count1++;
                }
            }
            if (count0 < count1 || count0 > count1)
            {
                Console.WriteLine(1);
                Console.WriteLine(s);
            }
            else
            {
                Console.WriteLine(2);
                Console.Write(s[0] + " ");
                for (int i = 1; i < n; i++)
                {
                    Console.Write(s[i]);
                }
            }
        }
    }
}

//#define EXTENDSTACKSIZE

using System;
 using System.Collections.Generic;
 using System.Globalization;
using System.IO;
using System.Linq;
 using System.Text;
 using System.Threading;

         namespace CF
{
    internal class Program
    {
        private const int stackSize = 64 * 1024 * 1024;

        private static void Run()
        {
            using (var sr = new InputReader(Console.In))
//            using (var sr = new InputReader(new StreamReader("input.txt")))
            using (var sw = Console.Out)
//            using (var sw = new StreamWriter("output.txt"))
            using (var task = new Task(sr, sw)) {
                task.Solve();
//                Console.ReadKey();
            }
        }

        private static void Main(string[] args)
        {
#if EXTENDSTACKSIZE
            var threadStart = new ThreadStart(Run);
            var thread = new Thread(threadStart, stackSize);
            thread.Start();
            thread.Join();
#else
            Run();
#endif
        }
    }

    internal class Task : IDisposable
    {
        private readonly InputReader sr;
        private readonly TextWriter sw;
        private bool isDispose;

        public Task(InputReader sr, TextWriter sw)
        {
            this.sr = sr;
            this.sw = sw;
        }

        public void Solve()
        {
            var n = sr.NextInt32();
            var s = sr.NextString();
            var oneCount = s.Count(ch => ch == '1');
            var zeroCount = s.Count(ch => ch == '0');
            if (oneCount != zeroCount)
            {
                sw.WriteLine(1);
                sw.WriteLine(s);
            }
            else
            {
                sw.WriteLine(2);
                sw.Write(s[0]);
                sw.Write(" ");
                sw.Write(s.Substring(1));
            }
        }

        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }

        private void Dispose(bool disposing)
        {
            if (!isDispose) {
                if (disposing) {
                    if(sr != null)
                        sr.Dispose();

                    if(sw != null)
                        sw.Dispose();
                }

                isDispose = true;
            }
        }
    }
}

internal class InputReader : IDisposable
{
    private bool isDispose;
    private readonly TextReader sr;
    private string[] buffer;
    private int seek;

    public InputReader(TextReader stream)
    {
        sr = stream;
    }

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    public string NextString()
    {
        var result = sr.ReadLine();
        return result;
    }

    public int NextInt32()
    {
        return Int32.Parse(ReadNextToken());
    }

    private string ReadNextToken()
    {
        if (buffer == null || seek == buffer.Length) {
            seek = 0;
            buffer = NextSplitStrings();
        }

        return buffer[seek++];
    }

    public long NextInt64()
    {
        return Int64.Parse(ReadNextToken());
    }

    public int[] ReadArrayOfInt32()
    {
        return ReadArray(Int32.Parse);
    }

    public long[] ReadArrayOfInt64()
    {
        return ReadArray(Int64.Parse);
    }

    public string[] NextSplitStrings()
    {
        return NextString()
            .Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
    }

    public T[] ReadArray<T>(Func<string, CultureInfo, T> func)
    {
        return NextSplitStrings()
            .Select(s => func(s, CultureInfo.InvariantCulture))
            .ToArray();
    }

    public T[] ReadArrayFromString<T>(Func<string, CultureInfo, T> func, string str)
    {
        return
            str.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
                .Select(s => func(s, CultureInfo.InvariantCulture))
                .ToArray();
    }

    protected void Dispose(bool dispose)
    {
        if (!isDispose)
        {
            if (dispose)
                sr.Close();

            isDispose = true;
        }
    }

    ~InputReader()
    {
        Dispose(false);
    }
}

using System;
using System.Collections.Generic;

namespace ОлимпПрог1
{

    class Program
    {
        public static bool isGood(string str)
        {
            int flag = 0;
            for(int i =0; i<str.Length; i++)
            {
                if (str[i] == '0')
                    flag--;
                else
                    flag++;
            }
            if (flag == 0)
                return false;
            else
                return true;
        }

        static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());
            string str = Console.ReadLine();
            if (isGood(str) == true)
            {
                Console.WriteLine(1);
                Console.WriteLine(str);
            }
            else
            {
                Console.WriteLine(2);
                string str1 = str.Substring(0, str.Length / 2);
                string str2 = str.Substring(str.Length / 2, str.Length - str.Length / 2);
                if (!isGood(str1))
                {
                    str1 += str2[0];
                    str2 = str2.Remove(str2.Length - 1);
                }
                Console.Write(str1 + " " + str2);
            }
        }

    }
}

using System;
using System.Collections.Generic;

namespace ОлимпПрог1
{

    class Program
    {
        public static bool isGood(string str)
        {
            int flag = 0;
            for(int i =0; i<str.Length; i++)
            {
                if (str[i] == '0')
                    flag--;
                else
                    flag++;
            }
            if (flag == 0)
                return false;
            else
                return true;
        }

        static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());
            string str = Console.ReadLine();
            if (isGood(str) == true)
            {
                Console.WriteLine(1);
                Console.WriteLine(str);
            }
            else
            {
                Console.WriteLine(2);
                string str1 = str.Substring(0, str.Length / 2);
                string str2 = str.Substring(str.Length / 2, str.Length - str.Length / 2);
                if (!isGood(str1))
                {
                    str1 += str2[0];
                    str2.Remove(str2.Length - 1);
                }
                Console.Write(str1 + " " + str2);
            }
        }

    }
}

/* Date: 05.07.2019  *  Time: 21:45 */
//
// https://docs.microsoft.com/en-us/dotnet/api/system.tuple-8?redirectedfrom=MSDN&view=netframework-4.7.2
//

/*
�	fflush(stdout) � ����� C++;
�	System.out.flush() � Java;
�	stdout.flush() � Python;
�	flush(output) � Pascal;

*/

using System;
using System.Globalization;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

class Example
{
	public static void Main (string[] args)
	{
# if ( ! ONLINE_JUDGE )
		StreamReader sr = new StreamReader ("C:\\TRR\\2019\\Task\\07 Codeforces\\040\\A.TXT");
		StreamWriter sw = new StreamWriter ("C:\\TRR\\2019\\Task\\07 Codeforces\\040\\OUTPUT.OUT");
# endif

		NumberFormatInfo nfi = NumberFormatInfo.InvariantInfo;

		int n;
		string s;

# if ( ONLINE_JUDGE )
		n = int.Parse (Console.ReadLine ());
		s = (Console.ReadLine ());
# else
		n = int.Parse (sr.ReadLine ());
		sw.WriteLine ("*** n = " + n);
		s = (sr.ReadLine ());
		sw.WriteLine ("*** " + s);
# endif

		int k0 = 0, k1 = 0;
		for ( int i=0; i < n; i++ )
			if ( s [i] == '0' )
				k0++;
			else
				k1++;

# if ( ! ONLINE_JUDGE )
		sw.WriteLine ("*** k0 = " + k0);
		sw.WriteLine ("*** k1 = " + k1);
# endif

# if ( ONLINE_JUDGE )
		if ( k1 != k0 )
			Console.WriteLine (s);
		else
		{
			Console.Write (s [0] + " ");
			for ( int i=1; i < n; i++ )
				Console.Write (s [i]);
			Console.WriteLine ();
		}
# else
		if ( k1 != k0 )
			sw.WriteLine (s);
		else
		{
			sw.Write (s [0] + " ");
			for ( int i=1; i < n; i++ )
				sw.Write (s [i]);
			sw.WriteLine ();
		}
# endif

# if ( ! ONLINE_JUDGE )
		sw.Close ();
# endif

	}
}

using System;
static class Program
{
    static void Main()
    {
        int n = int.Parse(Console.ReadLine());
        string s = Console.ReadLine();
        Console.WriteLine(n % 2 == 0 ? (2 + "\n" + s.Substring(0, n / 2) + " " + s.Substring(n / 2)) : n + "\n" + s);
    }
}

using System;
class Program
{
    static void Main()
    {
        int n = int.Parse(Console.ReadLine());
        string s = Console.ReadLine();
        Console.WriteLine(n % 2 == 0 ? (2 + "\n" + s.Substring(0, n - 1) + " " + s.Substring(n-1)) : n + "\n" + s);
    }
}

using System;
class Program
{
    static void Main()
    {
        int n = int.Parse(Console.ReadLine());
        string s = Console.ReadLine();
        int zero = 0;
        foreach (char c in s)
            if (c == '0')
                zero++;
        if (zero == n / 2)
            Console.WriteLine(2 + "\n" + s.Substring(0, n - 1) + " " + s.Substring(n - 1));
        else Console.WriteLine(1 + "\n" + s);
    }
}

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.CompilerServices;
using static System.Math;
using System.Text;

namespace Program
{
    public static class CODEFORCES1
    {
        static public void Solve()
        {
            var n = NN;
            var s = NS;
            var ary = s.Select(e => e == '0' ? -1 : 1).ToArray();
            var ruiseki = new long[n + 1];
            for (var i = 1; i <= n; i++)
            {
                ruiseki[i] = ruiseki[i - 1] + ary[i - 1];
            }

            var outlines = new List<string>();

            var startIdx = 1;
            while (true)
            {
                var maxIdx = startIdx;
                var ok = false;
                for (var i = startIdx; i <= n; i++)
                {
                    if (((ruiseki[i] - ruiseki[startIdx - 1]) != 0 && (ruiseki[n] - ruiseki[i] - ruiseki[startIdx - 1]) != 0) || ((ruiseki[i] - ruiseki[startIdx - 1]) != 0 && i == n))
                    {
                        maxIdx = i;
                        ok = true;
                        break;
                    }
                    else if (ruiseki[i] - ruiseki[startIdx - 1] != 0)
                    {
                        maxIdx = i;
                    }
                }
                outlines.Add(s.Substring(startIdx - 1, maxIdx - startIdx + 1));
                if (ok)
                {
                    outlines.Add(s.Substring(maxIdx));
                    break;
                }
                startIdx = maxIdx + 1;
            }
            Console.WriteLine(outlines.Where(e => e.Length != 0).Count());
            Console.WriteLine(string.Join(" ", outlines));

        }

        static public void Main(string[] args)
        {
            if (args.Length == 0) { var sw = new StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false }; Console.SetOut(sw); }
            Solve();
            Console.Out.Flush();
        }
        static Random rand = new Random();
        static class Console_
        {
            private static Queue<string> param = new Queue<string>();
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            public static string NextString() { if (param.Count == 0) foreach (var item in Console.ReadLine().Split(' ')) param.Enqueue(item); return param.Dequeue(); }
        }
        static long NN => long.Parse(Console_.NextString());
        static double ND => double.Parse(Console_.NextString());
        static string NS => Console_.NextString();
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        static long[] NNList(long N) => Repeat(0, N).Select(_ => NN).ToArray();
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        static double[] NDList(long N) => Repeat(0, N).Select(_ => ND).ToArray();
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        static string[] NSList(long N) => Repeat(0, N).Select(_ => NS).ToArray();
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        static IEnumerable<T> OrderByRand<T>(this IEnumerable<T> x) => x.OrderBy(_ => rand.Next());
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        static IEnumerable<T> Repeat<T>(T v, long n) => Enumerable.Repeat<T>(v, (int)n);
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        static IEnumerable<int> Range(long s, long c) => Enumerable.Range((int)s, (int)c);
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        static void RevSort<T>(T[] l) where T : IComparable { Array.Sort(l, (x, y) => y.CompareTo(x)); }
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        static void RevSort<T>(T[] l, Comparison<T> comp) where T : IComparable { Array.Sort(l, (x, y) => comp(y, x)); }
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        static IEnumerable<long> Primes(long x) { if (x < 2) yield break; yield return 2; var halfx = x / 2; var table = new bool[halfx + 1]; var max = (long)(Math.Sqrt(x) / 2); for (long i = 1; i <= max; ++i) { if (table[i]) continue; var add = 2 * i + 1; yield return add; for (long j = 2 * i * (i + 1); j <= halfx; j += add) table[j] = true; } for (long i = max + 1; i <= halfx; ++i) if (!table[i] && 2 * i + 1 <= x) yield return 2 * i + 1; }
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        static IEnumerable<long> Factors(long x) { if (x < 2) yield break; while (x % 2 == 0) { x /= 2; yield return 2; } var max = (long)Math.Sqrt(x); for (long i = 3; i <= max; i += 2) while (x % i == 0) { x /= i; yield return i; } if (x != 1) yield return x; }
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        static IEnumerable<long> Divisor(long x) { if (x < 1) yield break; var max = (long)Math.Sqrt(x); for (long i = 1; i <= max; ++i) { if (x % i != 0) continue; yield return i; if (i != x / i) yield return x / i; } }
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        static long GCD(long a, long b) { while (b > 0) { var tmp = b; b = a % b; a = tmp; } return a; }
        static long LCM(long a, long b) => a * b / GCD(a, b);
        class PQ<T> where T : IComparable
        {
            private List<T> h;
            private Comparison<T> c;
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            public PQ(int cap, Comparison<T> c, bool asc = true) { h = new List<T>(cap); this.c = asc ? c : (x, y) => c(y, x); }
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            public PQ(Comparison<T> c, bool asc = true) { h = new List<T>(); this.c = asc ? c : (x, y) => c(y, x); }
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            public PQ(int cap, bool asc = true) : this(cap, (x, y) => x.CompareTo(y), asc) { }
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            public PQ(bool asc = true) : this((x, y) => x.CompareTo(y), asc) { }
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            public void Push(T v) { var i = h.Count; h.Add(v); while (i > 0) { var ni = (i - 1) / 2; if (c(v, h[ni]) >= 0) break; h[i] = h[ni]; i = ni; } h[i] = v; }
            public T Peek => h[0];
            public int Count => h.Count;
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            public T Pop() { var r = h[0]; var v = h[h.Count - 1]; h.RemoveAt(h.Count - 1); if (h.Count == 0) return r; var i = 0; while (i * 2 + 1 < h.Count) { var i1 = i * 2 + 1; var i2 = i * 2 + 2; if (i2 < h.Count && c(h[i1], h[i2]) > 0) i1 = i2; if (c(v, h[i1]) <= 0) break; h[i] = h[i1]; i = i1; } h[i] = v; return r; }
        }
        class PQ<TKey, TValue> where TKey : IComparable
        {
            private PQ<Tuple<TKey, TValue>> q;
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            public PQ(int cap, Comparison<TKey> c, bool asc = true) { q = new PQ<Tuple<TKey, TValue>>(cap, (x, y) => c(x.Item1, y.Item1), asc); }
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            public PQ(Comparison<TKey> c, bool asc = true) { q = new PQ<Tuple<TKey, TValue>>((x, y) => c(x.Item1, y.Item1), asc); }
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            public PQ(int cap, bool asc = true) : this(cap, (x, y) => x.CompareTo(y), asc) { }
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            public PQ(bool asc = true) : this((x, y) => x.CompareTo(y), asc) { }
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            public void Push(TKey k, TValue v) => q.Push(Tuple.Create(k, v));
            public Tuple<TKey, TValue> Peek => q.Peek;
            public int Count => q.Count;
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            public Tuple<TKey, TValue> Pop() => q.Pop();
        }
        struct Mod : IEquatable<object>
        {
            static public long _mod = 1000000007;
            private long _val;
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            public Mod(long x) { if (x < _mod && x >= 0) _val = x; else if ((_val = x % _mod) < 0) _val += _mod; }
            static public implicit operator Mod(long x) => new Mod(x);
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            static public implicit operator long(Mod x) => x._val;
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            static public Mod operator +(Mod x, Mod y) => x._val + y._val;
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            static public Mod operator -(Mod x, Mod y) => x._val - y._val;
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            static public Mod operator *(Mod x, Mod y) => x._val * y._val;
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            static public Mod operator /(Mod x, Mod y) => x._val * Inverse(y._val);
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            static public bool operator ==(Mod x, Mod y) => x._val == y._val;
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            static public bool operator !=(Mod x, Mod y) => x._val != y._val;
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            static public long Inverse(long x) { long b = _mod, r = 1, u = 0, t = 0; while (b > 0) { var q = x / b; t = u; u = r - q * u; r = t; t = b; b = x - q * b; x = t; } return r < 0 ? r + _mod : r; }
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            bool IEquatable<object>.Equals(object obj) => obj == null ? false : Equals((Mod)obj);
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            public override bool Equals(object obj) => obj == null ? false : Equals((Mod)obj);
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            public bool Equals(Mod obj) => obj == null ? false : _val == obj._val;
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            public override int GetHashCode() => _val.GetHashCode();
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            public override string ToString() => _val.ToString();
            static private List<Mod> _fact = new List<Mod>() { 1 };
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            static private void Build(long n) { if (n >= _fact.Count) for (int i = _fact.Count; i <= n; ++i) _fact.Add(_fact[i - 1] * i); }
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            static public Mod Comb(long n, long k) { Build(n); if (n == 0 && k == 0) return 1; if (n < k || n < 0) return 0; return _fact[(int)n] / _fact[(int)(n - k)] / _fact[(int)k]; }
        }
        struct Mat<T>
        {
            private T[,] m;
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            public Mat(T[,] v) { m = (T[,])v.Clone(); }
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            static public implicit operator Mat<T>(T[,] v) => new Mat<T>(v);
            public T this[int r, int c] { get { return m[r, c]; } set { m[r, c] = value; } }
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            static public Mat<T> operator +(Mat<T> a, T x) { var tm = (T[,])a.m.Clone(); for (int r = 0; r < tm.GetLength(0); ++r) for (int c = 0; c < tm.GetLength(1); ++c) tm[r, c] += (dynamic)x; return tm; }
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            static public Mat<T> operator +(Mat<T> a, Mat<T> b) { var tm = (T[,])a.m.Clone(); for (int r = 0; r < tm.GetLength(0); ++r) for (int c = 0; c < tm.GetLength(1); ++c) tm[r, c] += (dynamic)b[r, c]; return tm; }
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            static public Mat<T> operator -(Mat<T> a, T x) { var tm = (T[,])a.m.Clone(); for (int r = 0; r < tm.GetLength(0); ++r) for (int c = 0; c < tm.GetLength(1); ++c) tm[r, c] -= (dynamic)x; return tm; }
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            static public Mat<T> operator -(Mat<T> a, Mat<T> b) { var tm = (T[,])a.m.Clone(); for (int r = 0; r < tm.GetLength(0); ++r) for (int c = 0; c < tm.GetLength(1); ++c) tm[r, c] -= (dynamic)b[r, c]; return tm; }
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            static public Mat<T> operator *(Mat<T> a, T x) { var tm = (T[,])a.m.Clone(); for (int r = 0; r < tm.GetLength(0); ++r) for (int c = 0; c < tm.GetLength(1); ++c) tm[r, c] *= (dynamic)x; return tm; }
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            static public Mat<T> operator *(Mat<T> a, Mat<T> b) { var nr = a.m.GetLength(0); var nc = b.m.GetLength(1); var tm = new T[nr, nc]; for (int i = 0; i < nr; ++i) for (int j = 0; j < nc; ++j) tm[i, j] = (dynamic)0; for (int r = 0; r < nr; ++r) for (int c = 0; c < nc; ++c) for (int i = 0; i < a.m.GetLength(1); ++i) tm[r, c] += a[r, i] * (dynamic)b[i, c]; return tm; }
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            static public Mat<T> Pow(Mat<T> x, long y) { var n = x.m.GetLength(0); var t = (Mat<T>)new T[n, n]; for (int i = 0; i < n; ++i) for (int j = 0; j < n; ++j) t[i, j] = (dynamic)(i == j ? 1 : 0); while (y != 0) { if ((y & 1) == 1) t *= x; x *= x; y >>= 1; } return t; }
        }
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        static Mat<T> Pow<T>(Mat<T> x, long y) => Mat<T>.Pow(x, y);
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        static T Pow<T>(T x, long y) { T a = (dynamic)1; while (y != 0) { if ((y & 1) == 1) a *= (dynamic)x; x *= (dynamic)x; y >>= 1; } return a; }
        static List<long> _fact = new List<long>() { 1 };
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        static void _Build(long n) { if (n >= _fact.Count) for (int i = _fact.Count; i <= n; ++i) _fact.Add(_fact[i - 1] * i); }
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        static long Comb(long n, long k) { _Build(n); if (n == 0 && k == 0) return 1; if (n < k || n < 0) return 0; return _fact[(int)n] / _fact[(int)(n - k)] / _fact[(int)k]; }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace KianuRivz
{
    class Class1
    {
        static void Main()
        {
            int ed = 0 , nol = 0;
            int n = Convert.ToInt32(Console.ReadLine());
            string s = Console.ReadLine();
            for (int i = 0; i < s.Length; i++) if (s[i] == 0) ed++; else nol++;
            if (ed != nol) Console.WriteLine("1\n1");
            if (ed == nol)
            {
                for (int i = 0; i < s.Length - 1; i++) Console.Write(s[i]);
                Console.Write($" {s[s.Length - 1]}");
            }
            }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace KianuRivz
{
    class Class1
    {
        static void Main()
        {
            int ed = 0 , nol = 0;
            int n = Convert.ToInt32(Console.ReadLine());
            string s = Console.ReadLine();
            for (int i = 0; i < s.Length; i++) if (s[i] == '1') ed++; else nol++;
            if (ed != nol) Console.WriteLine("1\n1");
            if (ed == nol)
            {
                Console.WriteLine("2");
                Console.Write(s.Substring(0, s.Length - 1));
                Console.Write($" {s[s.Length - 1]}");
            }
            }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace KianuRivz
{
    class Class1
    {
        static void Main()
        {
            int n = Convert.ToInt32(Console.ReadLine());
            string s = Console.ReadLine();
            for (int i = 0; i < s.Length-1; i++) Console.Write(s[i]);
            Console.Write($" {s[s.Length-1]}");
        }
    }
}

using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Pipes;

namespace consoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {

            int inputLength = int.Parse(Console.ReadLine());
            string inputNumber = Console.ReadLine();

            int j;
            int SplitAmmount = 0;
            bool istGut = false;
            List<string> splittedStrings = new List<string>();

            do
            {
                SplitAmmount++;
                splittedStrings.Clear();
                for(int i = 0; i<inputLength; i+= inputLength / SplitAmmount)
                {
                     splittedStrings.Add(inputNumber.Substring(i,inputLength/SplitAmmount));

                }

                istGut = TestForGood(splittedStrings.ToArray());
            } while (!istGut);

            Console.WriteLine(SplitAmmount);

            string finalString = string.Empty;

            foreach(var sstring in splittedStrings)
            {
                finalString += sstring + " ";
            }

            Console.WriteLine(finalString);
        }

        static bool TestForGood(string[] mainString)
        {
            foreach(var subString in mainString)
            {
                int j = -1000;
                var chars = subString.ToCharArray();

                foreach(var chara in chars)
                {
                    if (chara.ToString().Equals("0"))
                    {
                        j++;
                    }
                    else
                    {
                        j--;
                    }
                }
                j += 1000;
                if (j == 0)
                {
                    //ist schlecht
                    return false;
                }
            }
            // ist gut
            return true;
        }
    }
}

using System;
using System.Linq;
using System.Text;

namespace codeforce572div2
{
    class Program
    {
        static void Main(string[] args)
        {
            int n = Convert.ToInt32(Console.ReadLine());
            string str = Console.ReadLine();
            int[] A = str.ToArray().Select(x => x - '0').ToArray();
            int[] acc = new int[n + 1];
            for (int i = 1; i <= n; ++i)
                acc[i] = acc[i - 1] + A[i - 1];

            if(acc[n] != n / 2)
            {
                Console.WriteLine("1" + Environment.NewLine + str);
                return;
            }

            for(int i = 1; i <= n; ++i)
                if(Check(acc[i], i) && Check(acc[n] - acc[i], n - i))
                {
                    Console.WriteLine("2" + Environment.NewLine + str.Substring(0, i) + " " + str.Substring(i, n - i));
                    return;
                }

        }

        private static bool Check(int n, int l)
        {
            return n == l || n == 0 || n != l / 2;
        }
    }
}

using System;
using System.Linq;
using System.Text;

namespace codeforce572div2
{
    class Program
    {
        static void Main(string[] args)
        {
            int n = Convert.ToInt32(Console.ReadLine());
            string str = Console.ReadLine();
            int[] A = str.ToArray().Select(x => x - '0').ToArray();
            int[] acc = new int[n + 1];
            for (int i = 1; i <= n; ++i)
                acc[i] = acc[i - 1] + A[i - 1];

            if(acc[n] != n / 2 || n == acc[n] || acc[n] == 0)
            {
                Console.WriteLine("1" + Environment.NewLine + str);
                return;
            }

            for(int i = 1; i <= n; ++i)
                if(Check(acc[i], i) && Check(acc[n] - acc[i], n - i))
                {
                    Console.WriteLine("2" + Environment.NewLine + str.Substring(0, i) + " " + str.Substring(i, n - i));
                    return;
                }

        }

        private static bool Check(int n, int l)
        {
            return n == l || n == 0 || n != l / 2;
        }
    }
}

using System;
using System.Linq;
using System.Text;

namespace codeforce572div2
{
    class Program
    {
        static void Main(string[] args)
        {
            int n = Convert.ToInt32(Console.ReadLine());
            string str = Console.ReadLine();
            int[] A = str.ToArray().Select(x => x - '0').ToArray();
            int[] acc = new int[n + 1];
            for (int i = 1; i <= n; ++i)
                acc[i] = acc[i - 1] + A[i - 1];

            if(acc[n] != n / 2)
            {
                Console.WriteLine(str);
                return;
            }

            for(int i = 1; i <= n; ++i)
                if(Check(acc[i], i) && Check(acc[n] - acc[i], n - i))
                {
                    Console.WriteLine(str.Substring(0, i) + " " + str.Substring(i, n - i));
                    return;
                }

        }

        private static bool Check(int n, int l)
        {
            return n == l || n == 0 || n != l / 2;
        }
    }
}

using System;
using System.Linq;

namespace codeforces
{

    class Program
    {
        static void Main(string[] args)
        {
            int c1 = int.Parse(Console.ReadLine());
            string s = Console.ReadLine();
            if (s.Count(x=>x==1)!=s.Count(x=>x==0)||s.Length==1)
                Console.WriteLine("1\n"+s);
            else

            Console.WriteLine("2\n"+s.Remove(s.Length-1,1)+" "+s[s.Length-1]);

        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using static System.Console;
using static System.Math;

class Program
{
    static void Main()
    {
        var N = int.Parse(ReadLine());
        var s = ReadLine();
        var c = s.Count(x => x == '0');
        if (c == 0 || c == N)
        {
            WriteLine(1);
            WriteLine(s);
            return;
        }
        if (s.Skip(1).Count(x => x == '0') == s.Skip(1).Count(x => x == '1'))
        {
            WriteLine(2);
            WriteLine(s.Substring(0, 2) + " " + s.Substring(2));
        }
        else
        {
            WriteLine(2);
            WriteLine(s.Substring(0, 1) + " " + s.Substring(1));
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using static System.Console;
using static System.Math;

class Program
{
    static void Main()
    {
        var N = int.Parse(ReadLine());
        var s = ReadLine();
        if (N == 1)
        {
            WriteLine(1);
            WriteLine(s);
            return;
        }
        if (s.Skip(1).Count(x => x == '0') == s.Skip(1).Count(x => x == '1'))
        {
            WriteLine(2);
            WriteLine(s.Substring(0, 2) + " " + s.Substring(2));
        }
        else
        {
            WriteLine(2);
            WriteLine(s.Substring(0, 1) + " " + s.Substring(1));
        }
    }
}

using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
using static System.Array;
using static System.Console;
using static System.Math;

namespace Olymp
{
  public class ProblemSolver
  {
    private readonly Tokenizer input;

    public void Solve()
    {
      var n = input.ReadInt();
      var s = input.ReadToken();
      if (n % 2 == 1)
      {
        WriteLine(1);
        WriteLine(s);
      }
      else
      {
        WriteLine(2);
        WriteLine($"{s[0]} {s.Substring(1)}");
      }
    }

    public ProblemSolver(TextReader input)
    {
      this.input = new Tokenizer(input);
    }
  }

  #region Service classes

  public class Tokenizer
  {
    private readonly TextReader reader;

    public string ReadToEnd() => reader.ReadToEnd();

    public int ReadInt()
    {
      var c = SkipWs();
      if (c == -1)
        throw new EndOfStreamException();
      var isNegative = false;
      if (c == '-' || c == '+')
      {
        isNegative = c == '-';
        c = reader.Read();
        if (c == -1)
          throw new EndOfStreamException("Digit expected, but end of stream occurs");
      }

      if (!char.IsDigit((char)c))
        throw new InvalidOperationException($"Digit expected, but was: '{(char)c}'");

      checked
      {
        var result = (char)c - '0';
        c = reader.Read();
        while (c > 0 && !char.IsWhiteSpace((char)c))
        {
          if (!char.IsDigit((char)c))
            throw new InvalidOperationException($"Digit expected, but was: '{(char)c}'");
          result = result * 10 + (char)c - '0';
          c = reader.Read();
        }

        if (isNegative)
          result = -result;
        return result;
      }
    }

    public string ReadLine() => reader.ReadLine();

    public long ReadLong() => long.Parse(ReadToken());

    public double ReadDouble() => double.Parse(ReadToken(), CultureInfo.InvariantCulture);

    public int[] ReadIntArray(int n)
    {
      var a = new int[n];
      for (var i = 0; i < n; i++)
        a[i] = ReadInt();
      return a;
    }

    public (int, int) Read2Int() => (ReadInt(), ReadInt());

    public (int, int, int) Read3Int() => (ReadInt(), ReadInt(), ReadInt());

    public (int, int, int, int) Read4Int() => (ReadInt(), ReadInt(), ReadInt(), ReadInt());

    public (long, long) Read2Long() => (ReadLong(), ReadLong());

    public long[] ReadLongArray(int n)
    {
      var a = new long[n];
      for (var i = 0; i < n; i++)
        a[i] = ReadLong();
      return a;
    }

    public double[] ReadDoubleArray(int n)
    {
      var a = new double[n];
      for (var i = 0; i < n; i++)
        a[i] = ReadDouble();
      return a;
    }

    public string ReadToken()
    {
      var c = SkipWs();
      if (c == -1)
        return null;
      var sb = new StringBuilder();
      while (c > 0 && !char.IsWhiteSpace((char)c))
      {
        sb.Append((char)c);
        c = reader.Read();
      }

      return sb.ToString();
    }

    private int SkipWs()
    {
      var c = reader.Read();
      if (c == -1)
        return c;
      while (c > 0 && char.IsWhiteSpace((char)c))
        c = reader.Read();
      return c;
    }

    public Tokenizer(TextReader reader)
    {
      this.reader = reader;
    }
  }

  internal class Program
  {
    public static void Main()
    {
      var solver = new ProblemSolver(In);
      solver.Solve();
    }
  }

  #endregion
}

using System;
using System.Linq;
using System.Threading;
using static System.Console;
class Solution
{
    static void Main(string[] args)
    {
        int a = Convert.ToInt32(ReadLine());
        string b = ReadLine();
        solve(b);
    }
    public static void solve(string b)
    {
        int c = b.Count(x => x == '0');
        int d = b.Count(x => x == '1');
        if (c != d)
        {
            WriteLine(1);
            WriteLine(b);
        }
        else
        {
            WriteLine(2);
            string z = b.Substring(0, 1);
            string x = b.Substring(1, b.Length-2);
            WriteLine($"{z} {x}");
        }

    }
}

using System;

namespace Codeforces
{
    class Program
    {
        static void Main(string[] args)
        {
            var n = int.Parse(Console.ReadLine());
            var s = Console.ReadLine();

            var zeroes = 0;
            for (var i = 0; i < n; i++)
                if (s[i] == '0')
                    zeroes++;

            Console.WriteLine(n - zeroes == zeroes ? $"1 {s}" : $"2 {s.Substring(0, n - 1)} {s[n - 1]}");
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {

             int n=int.Parse(Console.ReadLine());
             string s=Console.ReadLine();
             int x=0;
             for(int i=0;i<n;i++)
             {
                  //bool f=false;
                  int zero=0;
                  int one=0;
                  for(int j=0;j<i;j++)
                  {
                       if(s[i]=='0')
                       zero++;
                       else
                       one++;

                  }
                  if(zero!=one)
                  {
                       zero=0;
                       one=0;
                       for(int j=i;j<n;j++)
                  {
                       if(s[i]=='0')
                       zero++;
                       else
                       one++;

                  }
                  }
                  if(zero!=one)
                  {
                       x=i;
                       break;
                  }

             }
             if(x>0)
             {
                  Console.WriteLine(2);
             for(int i=0;i<x;i++)
             Console.Write(s[i]);
             Console.Write(" ");
             for(int i=x;i<n;i++)
             Console.Write(s[i]);
             }
             else
             {
                  Console.WriteLine(1);

             Console.WriteLine(s);
             }
        }
    }
}