#include<bits/stdc++.h>
#define ull unsigned long long
using namespace std;
ull n,b[100005],p=131,mod=1000000007,hash1[100001],hasha;
string s1,s2;
ull sb(char t){
ull ret=t-'A'+1;
return ret;
}
ull hash_str(string t){
ull ret=0,sz=t.size();
for(int i=0;i<sz;i++) ret=(ret*p+sb(t[i]))%mod;
return ret;
}
int main(){
cin>>s1>>s2;
if(s1.size()<s2.size()){
ull ans=0;
hasha=hash_str(s1);
for(int i=1;i<=s2.size();i++) hash1[i]=hash1[i-1]*p+sb(s2[i]);
for(int i=1;i<=s2.size()-s1.size()+1;i++){
if(hash1[i+s1.size()-1]-hash1[i-1]*pow(p,s1.size())==hasha){
ans++;
}
}
if(ans>0) cout<<s1<<" is substring of "<<s2;
else cout<<"No substring";
}
else if(s1.size()>s2.size()){
ull ans=0;
hasha=hash_str(s2);
for(int i=1;i<=s1.size();i++) hash1[i]=hash1[i-1]*p+sb(s1[i]);
for(int i=1;i<=s1.size()-s2.size()+1;i++){
if(hash1[i+s2.size()-1]-hash1[i-1]*pow(p,s2.size())==hasha){
ans++;
}
}
if(ans>0) cout<<s2<<" is substring of "<<s1;
else cout<<"No substring";
}
else{
if(s1!=s2) cout<<"No substring";
else cout<<s1<<" is substring of "<<s2;
}
return 0;
}