这是算法:
#include <iostream>
using namespace std;
const int SIZE=5e5+10;
string a,b;
bool eqv(){
int alen=a.length(),blen=b.length();
if(alen==blen){
int df=0;
for(int i=0;i<alen;i++) if(a[i]!=b[i]){
df++;
if(df>1) break;
}
if(df<=1) return true;
else return false;
}else if(alen==blen+1){
if(a.substr(0,alen-1)==b||a.substr(1,alen-1)==b) return true;
for(int i=1;i<alen-1;i++){
if(a.substr(0,i)+a.substr(i+1)==b) return true;
}
return false;
}else if(alen==blen-1){
if(b.substr(0,blen-1)==a||b.substr(1,blen-1)==a) return true;
for(int i=1;i<blen-1;i++){
if(b.substr(0,i)+b.substr(i+1)==a) return true;
}
return false;
}else return false;
}
int main(){
int n,cnt=0;
bool ok[SIZE]={};
cin>>n>>a;
for(int i=1;i<=n;i++){
cin>>b;
if(eqv()) cnt++,ok[i]=true;
}
cout<<cnt<<endl;
for(int i=1;i<=n;i++) if(ok[i]) cout<<i<<" ";
cout<<endl;
return 0;
}