Problem:
M: 文字列集合

問題文

以下の条件を満たす文字列集合 $S$ のうち、要素数が最大となるものを $1$ つ構成してください。

$S$ に含まれる文字列の長さは $1$ 以上 $N$ 以下である。

$S$ に含まれる文字列の長さはそれぞれ異なる。

$S$ に含まれる文字列は、文字 0, 1 のみからなる。

$S$ に含まれるどの $2$ つの文字列についても、一方がもう一方の部分文字列とならない。

ただし、文字列 $x$ の部分文字列とは、 $x$ の先頭と末尾から $0$ 文字以上の文字を取り除くことで得られる文字列のことを言います。

制約

$1 \leq N \leq 300$

$N$ は整数である

入力

入力は以下の形式で標準入力から与えられる。

$N$

出力

条件を満たす文字列集合 $S$ のうち、要素数が最大となるものを $1$ つ出力せよ。このような $S$ は複数存在する可能性があるが、どれを出力しても正答となる。

具体的には、以下の形式で出力せよ。

$1$ 行目に $S$ の要素数 $K$ を出力せよ。

$2$ 行目から $K+1$ 行目に $S$ の要素をすべて出力せよ。各行には $S$ の要素を $1$ つ出力せよ。

$K$
$S_1$
$S_2$
$\vdots$
$S_K$

入力例1

2

出力例1

2
0
11

文字列集合 $\{0, 11\}$ は、条件を満たす集合の中で要素数が最大となるものです。

入力例2

1

出力例2

1
0

Solution in C# (judge verdict: Accepted)

using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Numerics;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using static System.Math;

public static class P
{
    public static void Main()
    {
        int n = int.Parse(Console.ReadLine());
        if (n == 1)
        {
            Console.WriteLine("1\n0");
            return;
        }
        if (n == 2)
        {
            Console.WriteLine("2\n0\n11");
            return;
        }
        Console.WriteLine(n - 1);
        for (int i = 2; i <= n; i++)
        {
            Console.WriteLine($"1{string.Join("", Enumerable.Repeat("0", i - 2))}1");
        }
    }
}