/* 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;
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.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;
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.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));
        }
    }
}

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.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.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.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.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;
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.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;

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;

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;

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);
             }
        }
    }
}