What is wrong with this Sting sort problem

#include

#include<string.h>

#include

using namespace std;

bool compare(string s1,string s2)

{

if (s1.find(s2) != std::string::npos) //line to check substring(s1) in a string(s2)

{

if(s1.length()>s2.length())

return s1>s2;

else

return s2>s1;

}

return s1>s2;

}

int main()

{

int n;

cin>>n;

string str[n];

for(int i=0;i<n;i++)

{

cin>>str[i];

}

sort(str,str+n,compare);

for(int i=0;i<n;i++)

{

cout<<str[i]<<endl;

}

return 0;

}

this worked
#include

#include<string.h>

#include

using namespace std;

bool compare(string a,string b)

{

if (a.find(b) != std::string::npos)

{

if(a.length()>b.length())

return a>b;

else

return a<b;

}

return b>a;

}

int main()

{

int n;

cin>>n;

string str[n];

for(int i=0;i<n;i++)

{

cin>>str[i];

}

sort(str,str+n,compare);

for(int i=0;i<n;i++)

{

cout<<str[i]<<endl;

}

return 0;

}