#include <iostream>#include <string>#include <algorithm>#include <queue>#define max_one 100#define max_two 50#define max_three 50using namespace std;struct node //structure must sign first { string str; int size; };struct cmp //return the most minimum string //pay attention : //must complete size first then complete string { bool operator() (const node &a, const node &b) { if(a.size >b.size) return true; else if(a.size ==b.size) return a.str>b.str; else return false; }};priority_queue <node, vector<node>, cmp> que;void score_string(char *p, char *q, int two, int three) //score string into queue { string temp=""; if(p>q) { int length=three > p-q+two ? three : p-q+two; for(int i=0; i<length ;i++) temp+=*(q+i); node a; a.str=temp; a.size=length; que.push(a); } else if(p<q) { int length=two > q-p+three ? two : q-p+three; for(int i=0; i<length ;i++) temp+=*(p+i); node a; a.str=temp; a.size=length; que.push(a); } else if(p=q) //pay attention : p=q such as this string //one :asdfgh two :asdfgh three:a; { int length=two >three ? two :three; for(int i=0; i<length ;i++) temp+=*(p+i); node a; a.str=temp; a.size=length; que.push(a); }}int main(){ int T; cin>>T; while(T--) { while(!que.empty() ) //each text must clean the queue { que.pop(); } char one[max_one],two[max_two],three[max_three]; cin>>one>>two>>three; int two_length=strlen(two); //score size of two three string int three_length=strlen(three); char *p=strstr(one,two); char *q=strstr(one,three); if(p==NULL ||q==NULL) cout<<"No"<<endl; else { char *two_point[max_two]; //set pointer array score the possible way of string char *three_point[max_three]; two_point[0]=p;three_point[0]=q; int size_two=1; char *temp_two=p,*temp_three=q; while( (temp_two=strstr(temp_two+1,two))!=NULL) //get different substring way two_point[size_two++]=temp_two; int size_three=1; while( (temp_three=strstr(temp_three+1,three))!=NULL) three_point[size_three++]=temp_three; for(int i=0; i<size_two; i++) //score { for(int j=0; j<size_three; j++) score_string(two_point[i], three_point[j], two_length, three_length); } cout<<que.top().str<<endl; } //cout<<que.top().str<<endl; } return 0;}