#include <cmath>
#include <stack>
#include <queue>
#include <string>
#include <cstdio>
#include <vector>
#include <map>
#include <set>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define inf 0x3f3f3f3f
#define met(a,b) memset(a,b,sizeof(a))
struct node
{
    int num[26];
    bool friend operator < (node a,node b)
    {
        for(int i=0;i<26;i++)
        {
            if(a.num[i]!=b.num[i])
                return a.num[i]>b.num[i];
        }
        return false;
    }
}sum[4005],sum1[4005];

set<node>q;
string a,b;

int main()
{
    q.clear();
    met(sum,0);
    met(sum1,0);
    cin>>a>>b;
    for(int i=0; i<a.length(); i++)
    {
        for(int j=0; j<26; j++)
        {
            sum[i+1].num[j]+=sum[i].num[j];
        }
        sum[i+1].num[a[i]-'a']++;
    }
    for(int i=0; i<b.length(); i++)
    {
        for(int j=0; j<26; j++)
        {
            sum1[i+1].num[j]+=sum1[i].num[j];
        }
        sum1[i+1].num[b[i]-'a']++;
    }
    int Max=0;
    for(int len=min((int)a.length(),(int)b.length());len>=1;len--)
    {
        q.clear();
        for(int i=0;i+len<=a.length();i++)
        {
            int j=i+len;
            node x;
            for(int k=0;k<26;k++)
            {
                x.num[k]=sum[j].num[k]-sum[i].num[k];
            }
            q.insert(x);
        }
        for(int i=0;i+len<=b.length();i++)
        {
            int j=i+len;
            node x;
            for(int k=0;k<26;k++)
            {
                x.num[k]=sum1[j].num[k]-sum1[i].num[k];
            }
            if(q.find(x)!=q.end())
            {
                int ans=0;
                for(int k=0;k<26;k++)
                    ans+=x.num[k];
                Max=max(Max,ans);
            }
        }

    }
    printf("%d\n",Max);
}