#include<bits/stdc++.h>
using namespace std;
const int N=15;
const int M=1e4+10;
struct node{
int l,r,k;
};
node dp[N][N],dp2[N][N][N];
string t[M],s;
map<int,int> bl;
int T,n,m;
int main(){
scanf("%d",&T);
while(T--){
memset(dp,0,sizeof dp);
memset(dp2,0,sizeof dp2);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) cin>>t[i];cin>>s;
for(int i=1;i<=n;i++){
for(int j=0;j<t[i].size();j++){
if(j>=1) dp[t[i][j-1]-'0'][t[i][j]-'0']={j-1,j,i};
if(j>=2) dp2[t[i][j-2]-'0'][t[i][j-1]-'0'][t[i][j]-'0']={j-2,j,i};
}
}
vector<node> res;
// memset(bl,false,sizeof bl);
bl.clear();bl[-1]=1;
for(int i=0;i<s.size();i++){
if(i>=1&&dp[s[i-1]-'0'][s[i]-'0'].k!=0&&bl.count(i-2)) bl[i]=1;
if(i>=2&&dp2[s[i-2]-'0'][s[i-1]-'0'][s[i]-'0'].k!=0&&bl.count(i-3)) bl[i]=2;
}
if(bl[m-1]==0){cout<<-1<<endl;continue;}
int now=m-1;
while(now!=-1){
if(bl[now]==1){
res.push_back({dp[s[now-1]-'0'][s[now]-'0'].l,dp[s[now-1]-'0'][s[now]-'0'].r,dp[s[now-1]-'0'][s[now]-'0'].k});
now-=2;
}else{
node tp=dp2[s[now-2]-'0'][s[now-1]-'0'][s[now]-'0'];
res.push_back({tp.l,tp.r,tp.k});
now-=3;
}
}
cout<<res.size()<<endl;
for(int i=res.size()-1;i>=0;i--){
cout<<res[i].l+1<<" "<<res[i].r+1<<" "<<res[i].k<<endl;
}
}
}
01-12
323
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交