CF1476E Pattern Matching

题目描述

给定 $n$ 个模式串 $p_i$ 和 $m$ 个字符串 $s_i$,其中 $p_i$ 两两不同。每个模式串和字符串都包含 $k$ 个字符。其中模式串中可以含通配符(用下划线表示,可以匹配任何字符),剩余字符都为小写英文字母。同时给定 $n$ 个数 $mt_i$,要求重新排列模式串使得 $s_j$ 匹配到的第一个模式串为 $p_{mt_j}$。请判断是否存在排列方案满足如上要求,能的话请输出方案。

输入格式

第一行三个正整数 $n,m,k$,分别表示模式串个数、字符串个数以及串长。 接下来 $n$ 行每行一个仅由小写英文字母与下划线组成的模式串 $p_i$。保证模式串串长为 $k$ 且两两不同。 接下来 $m$ 行每行一个字符串 $s_i$ 和一个正整数 $mt_i$。意义如题意表述。

输出格式

如果存在方案,第一行输出 $\texttt{YES}$ 并在下一行输出 $n$ 个由空格分隔的整数表示模式串的顺序。 如果方案不存在,输出 $\texttt{NO}$

说明/提示

$1\le n,m\le 1\times 10^5$,$1\le k\le 4$,对于所有的 $mt$ 都有 $1\le mt\le n$。