When the curtains are opened, a canvas unfolds outside. Kanno marvels at all the blonde colours along the riverside — not tangerines, but blossoms instead.

"What a pity it's already late spring," sighs Mino with regret, "one more drizzling night and they'd be gone."

"But these blends are at their best, aren't they?" Absorbed in the landscape, Kanno remains optimistic. 

The landscape can be expressed as a row of consecutive cells, each of which either contains a flower of colour amber or buff or canary yellow, or is empty.

When a flower withers, it disappears from the cell that it originally belonged to, and it spreads petals of its colour in its two neighbouring cells (or outside the field if the cell is on the side of the landscape). In case petals fall outside the given cells, they simply become invisible.

You are to help Kanno determine whether it's possible that after some (possibly none or all) flowers shed their petals, at least one of the cells contains all three colours, considering both petals and flowers. Note that flowers can wither in arbitrary order.

Input

The first and only line of input contains a non-empty string s consisting of uppercase English letters 'A', 'B', 'C' and characters '.' (dots) only (\lvert s \rvert ≤ 100) — denoting cells containing an amber flower, a buff one, a canary yellow one, and no flowers, respectively.

Output

Output "Yes" if it's possible that all three colours appear in some cell, and "No" otherwise.

You can print each letter in any case (upper or lower).

Examples

Input

.BAC.


Output

Yes


Input

AA..CB


Output

No

Note

In the first example, the buff and canary yellow flowers can leave their petals in the central cell, blending all three colours in it.

In the second example, it's impossible to satisfy the requirement because there is no way that amber and buff meet in any cell.
import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;
import java.io.IOException;import java.io.PrintStream;import java.io.PrintWriter;
import java.security.AccessControlException;import java.util.Arrays;import java.util.Collection;
import java.util.Comparator;import java.util.List;import java.util.Map;import java.util.Objects;
import java.util.Scanner;import java.util.TreeMap;import java.util.function.Function;
import java.util.stream.Collectors;import java.util.stream.IntStream;import java.util.stream.LongStream;
import java.util.stream.Stream;public class _p000989A {static public void main(final String[] args) 
throws IOException{p000989A._main(args);}
static private class p000989A extends Solver{public p000989A(){nameIn="in/900/p000989A.in"
;singleTest=true;}@Override public void solve()throws IOException{String s=sc.nextLine
().trim();char[]a=new char[3];boolean res=false;for(int i=1;i<s.length()-1;i++){
a[0]=s.charAt(i-1);a[1]=s.charAt(i);a[2]=s.charAt(i+1);Arrays.sort(a);if("ABC".equals
(String.valueOf(a))){res=true;break;}}pw.println(res?"Yes":"No");}static public 
void _main(String[]args)throws IOException{new p000989A().run();}}static private class
 Pair<K,V>{private K k;private V v;public Pair(final K t,final V u){this.k=t;this
.v=u;}public K getKey(){return k;}public V getValue(){return v;}}static private abstract class
 Solver{protected String nameIn=null;protected String nameOut=null;protected boolean
 singleTest=false;protected boolean preprocessDebug=false;protected boolean doNotPreprocess
=false;protected PrintStream debugPrintStream=null;protected Scanner sc=null;protected
 PrintWriter pw=null;final static String SPACE=" ";final static String SPACES="\\s+"
;private void process()throws IOException{if(!singleTest){int t=lineToIntArray()
[0];while(t-->0){solve();}}else{solve();}}abstract protected void solve()throws 
IOException;protected int[]lineToIntArray()throws IOException{return Arrays.stream
(sc.nextLine().trim().split(SPACES)).mapToInt(Integer::valueOf).toArray();}protected
 long[]lineToLongArray()throws IOException{return Arrays.stream(sc.nextLine().trim
().split(SPACES)).mapToLong(Long::valueOf).toArray();}protected void run()throws
 IOException{boolean done=false;try{if(nameIn!=null && new File(nameIn).exists()
){try(FileInputStream fis=new FileInputStream(nameIn);PrintWriter pw0=select_output
();){done=true;sc=new Scanner(fis);pw=pw0;process();}}}catch(IOException ex){}catch
(AccessControlException ex){}if(!done){try(PrintWriter pw0=select_output();){sc=
new Scanner(System.in);pw=pw0;process();}}}private PrintWriter select_output()throws
 FileNotFoundException{if(nameOut!=null){return new PrintWriter(nameOut);}return
 new PrintWriter(System.out);}public static Map<Integer,List<Integer>>mapi(final
 int[]a){return IntStream.range(0,a.length).collect(()->new TreeMap<Integer,List
<Integer>>(),(res,i)->{if(!res.containsKey(a[i])){res.put(a[i],Stream.of(i).collect
(Collectors.toList()));}else{res.get(a[i]).add(i);}},Map::putAll);}public static
 Map<Long,List<Integer>>mapi(final long[]a){return IntStream.range(0,a.length).collect
(()->new TreeMap<Long,List<Integer>>(),(res,i)->{if(!res.containsKey(a[i])){res.
put(a[i],Stream.of(i).collect(Collectors.toList()));}else{res.get(a[i]).add(i);}
},Map::putAll);}public static<T>Map<T,List<Integer>>mapi(final T[]a){return IntStream
.range(0,a.length).collect(()->new TreeMap<T,List<Integer>>(),(res,i)->{if(!res.
containsKey(a[i])){res.put(a[i],Stream.of(i).collect(Collectors.toList()));}else
{res.get(a[i]).add(i);}},Map::putAll);}public static<T>Map<T,List<Integer>>mapi(
final T[]a,Comparator<T>cmp){return IntStream.range(0,a.length).collect(()->new 
TreeMap<T,List<Integer>>(cmp),(res,i)->{if(!res.containsKey(a[i])){res.put(a[i],
Stream.of(i).collect(Collectors.toList()));}else{res.get(a[i]).add(i);}},Map::putAll
);}public static Map<Integer,List<Integer>>mapi(final IntStream a){int[]i=new int
[]{0};return a.collect(()->new TreeMap<Integer,List<Integer>>(),(res,v)->{if(!res
.containsKey(v)){res.put(v,Stream.of(i[0]).collect(Collectors.toList()));}else{res
.get(v).add(i[0]);}i[0]++;},Map::putAll);}public static Map<Long,List<Integer>>mapi
(final LongStream a){int[]i=new int[]{0};return a.collect(()->new TreeMap<Long,List
<Integer>>(),(res,v)->{if(!res.containsKey(v)){res.put(v,Stream.of(i[0]).collect
(Collectors.toList()));}else{res.get(v).add(i[0]);}i[0]++;},Map::putAll);}public
 static<T>Map<T,List<Integer>>mapi(final Stream<T>a,Comparator<T>cmp){int[]i=new
 int[]{0};return a.collect(()->new TreeMap<T,List<Integer>>(cmp),(res,v)->{if(!res
.containsKey(v)){res.put(v,Stream.of(i[0]).collect(Collectors.toList()));}else{res
.get(v).add(i[0]);}},Map::putAll);}public static<T>Map<T,List<Integer>>mapi(final
 Stream<T>a){int[]i=new int[]{0};return a.collect(()->new TreeMap<T,List<Integer
>>(),(res,v)->{if(!res.containsKey(v)){res.put(v,Stream.of(i[0]).collect(Collectors
.toList()));}else{res.get(v).add(i[0]);}},Map::putAll);}public static List<int[]
>listi(final int[]a){return IntStream.range(0,a.length).mapToObj(i->new int[]{a[
i],i}).collect(Collectors.toList());}public static List<long[]>listi(final long[
]a){return IntStream.range(0,a.length).mapToObj(i->new long[]{a[i],i}).collect(Collectors
.toList());}public static<T>List<Pair<T,Integer>>listi(final T[]a){return IntStream
.range(0,a.length).mapToObj(i->new Pair<T,Integer>(a[i],i)).collect(Collectors.toList
());}public static List<int[]>listi(final IntStream a){int[]i=new int[]{0};return
 a.mapToObj(v->new int[]{v,i[0]++}).collect(Collectors.toList());}public static 
List<long[]>listi(final LongStream a){int[]i=new int[]{0};return a.mapToObj(v->new
 long[]{v,i[0]++}).collect(Collectors.toList());}public static<T>List<Pair<T,Integer
>>listi(final Stream<T>a){int[]i=new int[]{0};return a.map(v->new Pair<T,Integer
>(v,i[0]++)).collect(Collectors.toList());}public static String join(final int[]
a){return Arrays.stream(a).mapToObj(Integer::toString).collect(Collectors.joining
(SPACE));}public static String join(final long[]a){return Arrays.stream(a).mapToObj
(Long::toString).collect(Collectors.joining(SPACE));}public static<T>String join
(final T[]a){return Arrays.stream(a).map(v->Objects.toString(v)).collect(Collectors
.joining(SPACE));}public static<T>String join(final T[]a,final Function<T,String
>toString){return Arrays.stream(a).map(v->toString.apply(v)).collect(Collectors.
joining(SPACE));}public static<T>String join(final Collection<T>a){return a.stream
().map(v->Objects.toString(v)).collect(Collectors.joining(SPACE));}public static
<T>String join(final Collection<T>a,final Function<T,String>toString){return a.stream
().map(v->toString.apply(v)).collect(Collectors.joining(SPACE));}public static<T
>String join(final Stream<T>a){return a.map(v->Objects.toString(v)).collect(Collectors
.joining(SPACE));}public static<T>String join(final Stream<T>a,final Function<T,
String>toString){return a.map(v->toString.apply(v)).collect(Collectors.joining(SPACE
));}public static<T>String join(final IntStream a){return a.mapToObj(Integer::toString
).collect(Collectors.joining(SPACE));}public static<T>String join(final LongStream
 a){return a.mapToObj(Long::toString).collect(Collectors.joining(SPACE));}public
 static List<Integer>list(final int[]a){return Arrays.stream(a).mapToObj(Integer
::valueOf).collect(Collectors.toList());}public static List<Integer>list(final IntStream
 a){return a.mapToObj(Integer::valueOf).collect(Collectors.toList());}public static
 List<Long>list(final long[]a){return Arrays.stream(a).mapToObj(Long::valueOf).collect
(Collectors.toList());}public static List<Long>list(final LongStream a){return a
.mapToObj(Long::valueOf).collect(Collectors.toList());}public static<T>List<T>list
(final Stream<T>a){return a.collect(Collectors.toList());}public static<T>List<T
>list(final T[]a){return Arrays.stream(a).collect(Collectors.toList());}}}
