#include <bits/stdc++.h>
using namespace std;
const int N=1e6+6;
char s[N];
struct SAM{
int fa,len,ch[26],siz[2];
}sam[N];
struct TRIE{
int ch[26],fa,pos,siz[2],c;
}tr[N];
int cnt,tot=1;
void insert_trie(char s[],int id){
int p=0;
int len=strlen(s);
for(int i=0;i<len;i++){
int a=s[i]-'a';
if(!tr[p].ch[a]) tr[p].ch[a]=++cnt;
p=tr[p].ch[a];
tr[p].siz[id]++;
tr[p].c=a;
}
}
int insert_sam(int lst,int c,int siz[]){
int p=lst,np=++tot;
sam[np].len=sam[p].len+1;
for(;p&&!sam[p].ch[c];p=sam[p].fa) sam[p].ch[c]=np;
if(!p) sam[np].fa=1;
else{
int q=sam[p].ch[c];
if(sam[q].len-1==sam[p].len){
sam[np].fa=q;
}
else{
int nq=++tot;
sam[nq]=sam[q];
sam[nq].len=sam[p].len+1;
for(;p&&sam[p].ch[c]==q;p=sam[p].fa) sam[p].ch[c]=nq;
sam[np].fa=sam[q].fa=nq;
}
}
sam[np].siz[0]=siz[0];
sam[np].siz[1]=siz[1];
return np;
}
void bfs(){
queue<int> q;
tr[0].pos=1;
for(int i=0;i<26;i++){
if(tr[0].ch[i]) q.push(tr[0].ch[i]);
}
while(!q.empty()){
int u=q.front();
q.pop();
tr[u].pos=insert_sam(tr[tr[u].fa].pos,tr[u].c,tr[u].siz);
for(int i=0;i<26;i++){
if(tr[u].ch[i]) q.push(tr[u].ch[i]);
}
}
}
int head[N],ecnt;
struct edge{
int v,nxt;
}e[N];
void add(int u,int v){
e[++ecnt].v=v;
e[ecnt].nxt=head[u];
head[u]=ecnt++;
}
int ans=1e9;
void dfs(int u){
for(int i=head[u];i;i=e[i].nxt){
int v=e[i].v;dfs(v);
sam[u].siz[0]+=sam[v].siz[0];
sam[u].siz[1]+=sam[v].siz[1];
}
if(sam[u].siz[0]==1&&sam[u].siz[1]==1){
ans=min(ans,sam[sam[u].fa].len+1);
}
}
int main(){
cin>>s;
insert_trie(s,0);
cin>>s;
insert_trie(s,1);
bfs();
for(int i=2;i<=tot;i++) add(sam[i].fa,i);
dfs(1);
cout<<ans;
}