AT_abc031_d [ABC031D] 語呂合わせ

题目描述

日本有一种将数字与短字符串对应的记忆文化。 对此产生兴趣的高桥君,决定推断出仅由 $1$ 以上 $K$ 以下的数字组成的正整数 $v_1,v_2,\cdots,v_n$ 以及对应的字符串 $w_1,w_2,\cdots,w_n$ 的组合 $(v_1,w_1),(v_2,w_2),\cdots,(v_n,w_n)$ 中,哪个数字对应哪个字符串。 也就是说,想要找出满足以下条件的 $K$ 个字符串 $s_1,s_2,\cdots,s_K$。 - 对于满足 $1 \leqq i \leqq K$ 的任意整数 $i$,必须满足 $1 \leqq |s_i| \leqq 3$。 - 对于满足 $1 \leqq i \leqq N$ 的任意整数 $i$,当将整数 $v_i$ 按位分解时,得到的数字从上到下依次为 $d_1,d_2,\cdots,d_l$,则将字符串 $s_{d_1},s_{d_2},\cdots,s_{d_l}$ 按此顺序连接的字符串等于 $w_i$。 请编写程序输出 $K$ 个字符串 $s_1,s_2,\cdots,s_k$。

输入格式

输入通过标准输入以以下格式给出。 > $K \space N$ > $v_1 \space w_1$ > $v_2 \space w_2$ > $\vdots$ > $v_N \space w_N$ - 第 $1$ 行包含用空格分隔的两个整数 $K,N$。 - 第 $2 \sim N$ 行,每一行给出关于数字和字符串组合的信息。在每一行中,包含空格分隔的完全由 $1 \sim K$ **组成的数字**和完全由**半角小写字母**组成的字符串。 翻译来自 @[lby_commandBlock](/user/791222)。

输出格式

共 $K$ 行。第 $i(1 \leqq i \leqq K)$ 行输出字符串 $s_i$。 若有多种组合,输出任意一个组合即可。 注意输出的末尾要加上换行。 ### 样例解释 1 在这个样例中,通过将 $s_1=$ `i`,$s_2=$ `ni`,$s_3=$ `mi`,$s_4=$ `yo`,$s_5=$ `go`,$s_6=$ `ro` 设定为可以满足题意的 $K$ 个字符串。事实上, - 当将 $v_1=356$ 按位分解时,得到 $3,5,6$,将 $s_3=$ `mi`,$s_5=$ `go`,$s_6=$ `ro` 按此按此顺序连接的字符串 `migoro` 等于 $w_1$。 - 当将 $v_2=461$ 按位分解时,得到 $4,6,1$,将 $s_4=$ `yo`,$s_6=$ `ro`,$s_1=$ `i` 按此按此顺序连接的字符串 `yoroi` 等于 $w_2$。 - 当将 $v_3=2$ 按位分解时,得到 $2$,$s_2=$ `ni` 等于 $w_3$。 - 当将 $v_4=12$ 按位分解时,得到 $1,2$,$s_1=$ `i`,$s_2=$ `ni` 按此顺序连接的字符串 `ini` 等于 $w_4$。 ### 数据规模与约定 - 对于所有数据,满足 $1 \leqq K \leqq 9,1 \leqq N \leqq 50$。 - 满足 $1 \sim K$ 的所有数字在 $v_1,v_2,\cdots,v_N$ 中**至少出现过一次**。 - 满足 $s_1,s_2,\cdots,s_K$ 一定存在。 ### 部分分 本题设置了部分分。 - 如果通过了由 $K \leqq 3$ 和 $w_1$ 到 $w_N$ 的任何字符串组成的数据集 $1$,将获得 $40$ 分。

说明/提示

### 部分点 この問題には部分点が設定されている。 - $ K\ ≦\ 3 $ かつ $ w_1 $ から $ w_N $ までのどの文字列も `a`, `b`, `c` のいずれかのみで構成されているデータセット $ 1 $ に正解した場合は、$ 40 $ 点が与えられる。 - 追加制約のないデータセット $ 2 $ に正解した場合は、上記とは別に $ 60 $ 点が与えられる。 ### Sample Explanation 1 この入力例では、$ s_1\ = $ `i`, $ s_2\ = $ `ni`, $ s_3\ = $ `mi`, $ s_4\ = $ `yo`, $ s_5\ = $ `go`, $ s_6\ = $ `ro` と置くことによって題意を満たす $ K $ 個の文字列とすることができる。実際に、 - $ v_1\ =\ 356 $ を桁ごとに分解した場合に $ 3 $, $ 5 $, $ 6 $ が得られ、$ s_3\ = $ `mi`, $ s_5\ = $ `go`, $ s_6\ = $ `ro` をこの順に連結した文字列 `migoro` は $ w_1 $ に等しい。 - $ v_2\ =\ 461 $ を桁ごとに分解した場合に $ 4 $, $ 6 $, $ 1 $ が得られ、$ s_4\ = $ `yo`, $ s_6\ = $ `ro`, $ s_1\ = $ `i` をこの順に連結した文字列 `yoroi` は $ w_2 $ に等しい。 - $ v_3\ =\ 2 $ を桁ごとに分解した場合に $ 2 $ が得られ、$ s_2\ = $ `ni` は $ w_3 $ に等しい。 - $ v_4\ =\ 12 $ を桁ごとに分解した場合に $ 1 $, $ 2 $ が得られ、$ s_1\ = $ `i`, $ s_2\ = $ `ni` をこの順に連結した文字列 `ini` は $ w_4 $ に等しい。 なお、この入力例はデータセット $ 1 $ の条件を満たさないことに注意せよ。