Problem:
Score : 200 points

Problem Statement

You are given strings s and t, consisting of lowercase English letters.
You will create a string s' by freely rearranging the characters in s.
You will also create a string t' by freely rearranging the characters in t.
Determine whether it is possible to satisfy s' < t' for the lexicographic order.

Notes

For a string a = a_1 a_2 ... a_N of length N and a string b = b_1 b_2 ... b_M of length M, we say a < b for the lexicographic order if either one of the following two conditions holds true:

N < M and a_1 = b_1, a_2 = b_2, ..., a_N = b_N.

There exists i (1 \leq i \leq N, M) such that a_1 = b_1, a_2 = b_2, ..., a_{i - 1} = b_{i - 1} and a_i < b_i. Here, letters are compared using alphabetical order.

For example, xy < xya and atcoder < atlas.

Constraints

The lengths of s and t are between 1 and 100 (inclusive).

s and t consists of lowercase English letters.

Input

Input is given from Standard Input in the following format:

s
t

Output

If it is possible to satisfy s' < t', print Yes; if it is not, print No.

Sample Input 1

yx
axy

Sample Output 1

Yes

We can, for example, rearrange yx into xy and axy into yxa. Then, xy < yxa.

Sample Input 2

ratcode
atlas

Sample Output 2

Yes

We can, for example, rearrange ratcode into acdeort and atlas into tslaa. Then, acdeort < tslaa.

Sample Input 3

cd
abc

Sample Output 3

No

No matter how we rearrange cd and abc, we cannot achieve our objective.

Sample Input 4

w
ww

Sample Output 4

Yes

Sample Input 5

zzz
zzz

Sample Output 5

No

Solution in C (GCC 5.4.1) (judge verdict: Wrong Answer)

#include <stdio.h>
#include <string.h>

void swap_str_prt( char **a, char **b )
{
  char *tmp;

  tmp  = *a;
  *a   = *b;
  *b   = tmp;

}

void sort_str_ptr( char a, char b, char **x, char **y )
{
  if( a > b )//文字を比較
  {
    swap_str_prt( x, y );//入れ替える
  }
}

void bubble( int kai, char **pp)
{
  int count = kai;

  for(int i=0; i<kai-1; i++)
  {
    for(int v=0; v<count-1; v++)
    {
      sort_str_ptr( **(pp+v), **(pp+v+1),pp+v, pp+v+1 );//ポインタのポインタも順番に並んでいるらしい
    }
    //真上のfor文を抜けると、一つ確定する。そのため、count--;
    count--;
  }
}

int main(void)
{
  char s[256],t[256];
  int slen,tlen;
  int flag=0;

  scanf("%s",s);
  scanf("%s",t);

  slen = strlen(s);
  tlen = strlen(t);
    int count = slen;

    for(int i=0; i<slen-1; i++)
    {
      for(int v=0; v<count-1; v++)
      {
          if( s[v] > s[v+1] )//文字を比較
          {
            char tmp;

            tmp  = s[v];
            s[v] = s[v+1];
            s[v+1] = tmp;
          }
      }
      //真上のfor文を抜けると、一つ確定する。そのため、count--;
      count--;
    }

    count = tlen;

    for(int i=0; i<tlen-1; i++)
    {
      for(int v=0; v<count-1; v++)
      {
          if( t[v] < t[v+1] )//文字を比較
          {
            char tmp;

            tmp  = t[v];
            t[v] = t[v+1];
            t[v+1] = tmp;
          }
      }
      //真上のfor文を抜けると、一つ確定する。そのため、count--;
      count--;
    }

    if(slen < tlen)
    {
      for(int i=0; i<slen; i++)
      {
        if(s[i] < t[i])
        {
          flag++;
        }else if(s[i] == t[i+1])
        {
          flag++;
        }
      }
      if(flag>0) {
        printf("Yes\n");
      }
      else
      {
        printf("No\n");
      }
      // printf("%s\n",s);
      // printf("%s\n",t);

    }//1の条件
    else if(slen >= tlen)
    {
      for(int i=0; i<tlen; i++)
      {
        if(s[i] < t[i])
        {
          flag++;
        }
      }
      if(flag>0) {
        printf("Yes\n");
      }
      else
      {
        printf("No\n");
      }
    }
}