#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int nxt[N];
void get_next(string s) {
int len = s.size();
int i = 1, k = 0;
nxt[1] = 0;
while(i < len) {
if(k == 0 || s[i] == s[k]) {
i ++, k ++;
if(s[i] != s[k]) nxt[i] = k;
else nxt[i] = nxt[k];
} else {
k = nxt[k];
}
}
}
bool indexKMP(string s, string t) {
int i = 1, j = 1;
get_next(t);
int len1 = s.size(), len2 = t.size();
while(i < len1 && j < len2) {
if(j == 0 || s[i] == t[j]) i ++, j ++;
else j = nxt[j];
}
if(j >= len2) return true;
else return false;
}
int main() {
string s0, s1; cin >> s0 >> s1;
int len0 = s0.size(), len1 = s1.size();
if(len1 >= len0 && indexKMP(s1, s0)) {
cout << s0 << " is substring of " << s1 << endl;
} else if(len1 <= len0 && indexKMP(s0, s1)) {
cout << s1 << " is substring of " << s0 << endl;
} else {
cout << "No substring" << endl;
}
return 0;
}