import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.*;

public class Main {
    static InputStream is;
    static PrintWriter out;
    static String INPUT = "";

    static void solve()
    {
        Map<Character, Queue<Character>> map = new HashMap<>();
        Queue<Character> a = new LinkedList<>();
        Queue<Character> b = new LinkedList<>();
        Queue<Character> c = new LinkedList<>();

        map.put('a', a);
        map.put('b', b);
        map.put('c', c);

        String SA = ns();
        String SB = ns();
        String SC = ns();

        for (int i = 0; i < SA.length(); i++) {
            a.add(SA.charAt(i));
        }

        for (int i = 0; i < SB.length(); i++) {
            b.add(SB.charAt(i));
        }

        for (int i = 0; i < SC.length(); i++) {
            c.add(SC.charAt(i));
        }

        char lead = 'a';
        while (map.get(lead).size() != 0) {
            char card = map.get(lead).poll();
            lead = card;
        }
        System.out.println(Character.toUpperCase(lead));
    }

    public static void main(String[] args) throws Exception
    {
        long S = System.currentTimeMillis();
        is = INPUT.isEmpty() ? System.in : new ByteArrayInputStream(INPUT.getBytes());
        out = new PrintWriter(System.out);

        solve();
        out.flush();
        long G = System.currentTimeMillis();
        tr(G-S+"ms");
    }

    private static boolean eof()
    {
        if(lenbuf == -1)return true;
        int lptr = ptrbuf;
        while(lptr < lenbuf)if(!isSpaceChar(inbuf[lptr++]))return false;

        try {
            is.mark(1000);
            while(true){
                int b = is.read();
                if(b == -1){
                    is.reset();
                    return true;
                }else if(!isSpaceChar(b)){
                    is.reset();
                    return false;
                }
            }
        } catch (IOException e) {
            return true;
        }
    }

    private static byte[] inbuf = new byte[1024];
    static int lenbuf = 0, ptrbuf = 0;

    private static int readByte()
    {
        if(lenbuf == -1)throw new InputMismatchException();
        if(ptrbuf >= lenbuf){
            ptrbuf = 0;
            try { lenbuf = is.read(inbuf); } catch (IOException e) { throw new InputMismatchException(); }
            if(lenbuf <= 0)return -1;
        }
        return inbuf[ptrbuf++];
    }

    private static boolean isSpaceChar(int c) { return !(c >= 33 && c <= 126); }

    private static int skip() { int b; while((b = readByte()) != -1 && isSpaceChar(b)); return b; }

    private static double nd() { return Double.parseDouble(ns()); }
    private static char nc() { return (char)skip(); }

    private static String ns()
    {
        int b = skip();
        StringBuilder sb = new StringBuilder();
        while(!(isSpaceChar(b))){
            sb.appendCodePoint(b);
            b = readByte();
        }
        return sb.toString();
    }

    private static char[] ns(int n)
    {
        char[] buf = new char[n];
        int b = skip(), p = 0;
        while(p < n && !(isSpaceChar(b))){
            buf[p++] = (char)b;
            b = readByte();
        }
        return n == p ? buf : Arrays.copyOf(buf, p);
    }

    private static char[][] nm(int n, int m)
    {
        char[][] map = new char[n][];
        for(int i = 0;i < n;i++)map[i] = ns(m);
        return map;
    }

    private static int[] na(int n)
    {
        int[] a = new int[n];
        for(int i = 0;i < n;i++)a[i] = ni();
        return a;
    }

    private static int ni()
    {
        int num = 0, b;
        boolean minus = false;
        while((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-'));
        if(b == '-'){
            minus = true;
            b = readByte();
        }

        while(true){
            if(b >= '0' && b <= '9'){
                num = num * 10 + (b - '0');
            }else{
                return minus ? -num : num;
            }
            b = readByte();
        }
    }

    private static long nl()
    {
        long num = 0;
        int b;
        boolean minus = false;
        while((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-'));
        if(b == '-'){
            minus = true;
            b = readByte();
        }

        while(true){
            if(b >= '0' && b <= '9'){
                num = num * 10 + (b - '0');
            }else{
                return minus ? -num : num;
            }
            b = readByte();
        }
    }

    private static void tr(Object... o) { if(INPUT.length() != 0)System.out.println(Arrays.deepToString(o)); }
}
 import java.io.ByteArrayInputStream; ByteArrayInputStream java.io import java.io.IOException; IOException java.io import java.io.InputStream; InputStream java.io import java.io.PrintWriter; PrintWriter java.io import java.util.*; util.* java public class Main {
    static InputStream is;
    static PrintWriter out;
    static String INPUT = "";

    static void solve()
    {
        Map<Character, Queue<Character>> map = new HashMap<>();
        Queue<Character> a = new LinkedList<>();
        Queue<Character> b = new LinkedList<>();
        Queue<Character> c = new LinkedList<>();

        map.put('a', a);
        map.put('b', b);
        map.put('c', c);

        String SA = ns();
        String SB = ns();
        String SC = ns();

        for (int i = 0; i < SA.length(); i++) {
            a.add(SA.charAt(i));
        }

        for (int i = 0; i < SB.length(); i++) {
            b.add(SB.charAt(i));
        }

        for (int i = 0; i < SC.length(); i++) {
            c.add(SC.charAt(i));
        }

        char lead = 'a';
        while (map.get(lead).size() != 0) {
            char card = map.get(lead).poll();
            lead = card;
        }
        System.out.println(Character.toUpperCase(lead));
    }

    public static void main(String[] args) throws Exception
    {
        long S = System.currentTimeMillis();
        is = INPUT.isEmpty() ? System.in : new ByteArrayInputStream(INPUT.getBytes());
        out = new PrintWriter(System.out);

        solve();
        out.flush();
        long G = System.currentTimeMillis();
        tr(G-S+"ms");
    }

    private static boolean eof()
    {
        if(lenbuf == -1)return true;
        int lptr = ptrbuf;
        while(lptr < lenbuf)if(!isSpaceChar(inbuf[lptr++]))return false;

        try {
            is.mark(1000);
            while(true){
                int b = is.read();
                if(b == -1){
                    is.reset();
                    return true;
                }else if(!isSpaceChar(b)){
                    is.reset();
                    return false;
                }
            }
        } catch (IOException e) {
            return true;
        }
    }

    private static byte[] inbuf = new byte[1024];
    static int lenbuf = 0, ptrbuf = 0;

    private static int readByte()
    {
        if(lenbuf == -1)throw new InputMismatchException();
        if(ptrbuf >= lenbuf){
            ptrbuf = 0;
            try { lenbuf = is.read(inbuf); } catch (IOException e) { throw new InputMismatchException(); }
            if(lenbuf <= 0)return -1;
        }
        return inbuf[ptrbuf++];
    }

    private static boolean isSpaceChar(int c) { return !(c >= 33 && c <= 126); }

    private static int skip() { int b; while((b = readByte()) != -1 && isSpaceChar(b)); return b; }

    private static double nd() { return Double.parseDouble(ns()); }
    private static char nc() { return (char)skip(); }

    private static String ns()
    {
        int b = skip();
        StringBuilder sb = new StringBuilder();
        while(!(isSpaceChar(b))){
            sb.appendCodePoint(b);
            b = readByte();
        }
        return sb.toString();
    }

    private static char[] ns(int n)
    {
        char[] buf = new char[n];
        int b = skip(), p = 0;
        while(p < n && !(isSpaceChar(b))){
            buf[p++] = (char)b;
            b = readByte();
        }
        return n == p ? buf : Arrays.copyOf(buf, p);
    }

    private static char[][] nm(int n, int m)
    {
        char[][] map = new char[n][];
        for(int i = 0;i < n;i++)map[i] = ns(m);
        return map;
    }

    private static int[] na(int n)
    {
        int[] a = new int[n];
        for(int i = 0;i < n;i++)a[i] = ni();
        return a;
    }

    private static int ni()
    {
        int num = 0, b;
        boolean minus = false;
        while((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-'));
        if(b == '-'){
            minus = true;
            b = readByte();
        }

        while(true){
            if(b >= '0' && b <= '9'){
                num = num * 10 + (b - '0');
            }else{
                return minus ? -num : num;
            }
            b = readByte();
        }
    }

    private static long nl()
    {
        long num = 0;
        int b;
        boolean minus = false;
        while((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-'));
        if(b == '-'){
            minus = true;
            b = readByte();
        }

        while(true){
            if(b >= '0' && b <= '9'){
                num = num * 10 + (b - '0');
            }else{
                return minus ? -num : num;
            }
            b = readByte();
        }
    }

    private static void tr(Object... o) { if(INPUT.length() != 0)System.out.println(Arrays.deepToString(o)); }
} Main static InputStream is; is static PrintWriter out; out static String INPUT = ""; INPUT "" private static byte[] inbuf = new byte[1024]; inbuf new byte[1024] 1024 static int lenbuf = 0 lenbuf 0 ptrbuf = 0; ptrbuf 0 static void solve()
    {
        Map<Character, Queue<Character>> map = new HashMap<>();
        Queue<Character> a = new LinkedList<>();
        Queue<Character> b = new LinkedList<>();
        Queue<Character> c = new LinkedList<>();

        map.put('a', a);
        map.put('b', b);
        map.put('c', c);

        String SA = ns();
        String SB = ns();
        String SC = ns();

        for (int i = 0; i < SA.length(); i++) {
            a.add(SA.charAt(i));
        }

        for (int i = 0; i < SB.length(); i++) {
            b.add(SB.charAt(i));
        }

        for (int i = 0; i < SC.length(); i++) {
            c.add(SC.charAt(i));
        }

        char lead = 'a';
        while (map.get(lead).size() != 0) {
            char card = map.get(lead).poll();
            lead = card;
        }
        System.out.println(Character.toUpperCase(lead));
    } solve {
        Map<Character, Queue<Character>> map = new HashMap<>();
        Queue<Character> a = new LinkedList<>();
        Queue<Character> b = new LinkedList<>();
        Queue<Character> c = new LinkedList<>();

        map.put('a', a);
        map.put('b', b);
        map.put('c', c);

        String SA = ns();
        String SB = ns();
        String SC = ns();

        for (int i = 0; i < SA.length(); i++) {
            a.add(SA.charAt(i));
        }

        for (int i = 0; i < SB.length(); i++) {
            b.add(SB.charAt(i));
        }

        for (int i = 0; i < SC.length(); i++) {
            c.add(SC.charAt(i));
        }

        char lead = 'a';
        while (map.get(lead).size() != 0) {
            char card = map.get(lead).poll();
            lead = card;
        }
        System.out.println(Character.toUpperCase(lead));
    } Map<Character, Queue<Character>> map = new HashMap<>(); map new HashMap<>() Queue<Character> a = new LinkedList<>(); a new LinkedList<>() Queue<Character> b = new LinkedList<>(); b new LinkedList<>() Queue<Character> c = new LinkedList<>(); c new LinkedList<>() map.put('a', a) map.put map 'a' a map.put('b', b) map.put map 'b' b map.put('c', c) map.put map 'c' c String SA = ns(); SA ns() ns String SB = ns(); SB ns() ns String SC = ns(); SC ns() ns for (int i = 0; i < SA.length(); i++) {
            a.add(SA.charAt(i));
        } int i = 0; int i = 0; i 0 i < SA.length() i SA.length() SA.length SA i++ i++ i {
            a.add(SA.charAt(i));
        } {
            a.add(SA.charAt(i));
        } a.add(SA.charAt(i)) a.add a SA.charAt(i) SA.charAt SA i for (int i = 0; i < SB.length(); i++) {
            b.add(SB.charAt(i));
        } int i = 0; int i = 0; i 0 i < SB.length() i SB.length() SB.length SB i++ i++ i {
            b.add(SB.charAt(i));
        } {
            b.add(SB.charAt(i));
        } b.add(SB.charAt(i)) b.add b SB.charAt(i) SB.charAt SB i for (int i = 0; i < SC.length(); i++) {
            c.add(SC.charAt(i));
        } int i = 0; int i = 0; i 0 i < SC.length() i SC.length() SC.length SC i++ i++ i {
            c.add(SC.charAt(i));
        } {
            c.add(SC.charAt(i));
        } c.add(SC.charAt(i)) c.add c SC.charAt(i) SC.charAt SC i char lead = 'a'; lead 'a' while (map.get(lead).size() != 0) {
            char card = map.get(lead).poll();
            lead = card;
        } map.get(lead).size() != 0 map.get(lead).size() map.get(lead).size map.get(lead) map.get map lead 0 {
            char card = map.get(lead).poll();
            lead = card;
        } char card = map.get(lead).poll(); card map.get(lead).poll() map.get(lead).poll map.get(lead) map.get map lead lead = card lead card System.out.println(Character.toUpperCase(lead)) System.out.println System.out System System.out Character.toUpperCase(lead) Character.toUpperCase Character lead public static void main(String[] args) throws Exception
    {
        long S = System.currentTimeMillis();
        is = INPUT.isEmpty() ? System.in : new ByteArrayInputStream(INPUT.getBytes());
        out = new PrintWriter(System.out);

        solve();
        out.flush();
        long G = System.currentTimeMillis();
        tr(G-S+"ms");
    } main {
        long S = System.currentTimeMillis();
        is = INPUT.isEmpty() ? System.in : new ByteArrayInputStream(INPUT.getBytes());
        out = new PrintWriter(System.out);

        solve();
        out.flush();
        long G = System.currentTimeMillis();
        tr(G-S+"ms");
    } long S = System.currentTimeMillis(); S System.currentTimeMillis() System.currentTimeMillis System is = INPUT.isEmpty() ? System.in : new ByteArrayInputStream(INPUT.getBytes()) is INPUT.isEmpty() ? System.in : new ByteArrayInputStream(INPUT.getBytes()) INPUT.isEmpty() INPUT.isEmpty INPUT System.in System System.in new ByteArrayInputStream(INPUT.getBytes()) out = new PrintWriter(System.out) out new PrintWriter(System.out) solve() solve out.flush() out.flush out long G = System.currentTimeMillis(); G System.currentTimeMillis() System.currentTimeMillis System tr(G-S+"ms") tr G-S+"ms" G-S G S "ms" String[] args args private static boolean eof()
    {
        if(lenbuf == -1)return true;
        int lptr = ptrbuf;
        while(lptr < lenbuf)if(!isSpaceChar(inbuf[lptr++]))return false;

        try {
            is.mark(1000);
            while(true){
                int b = is.read();
                if(b == -1){
                    is.reset();
                    return true;
                }else if(!isSpaceChar(b)){
                    is.reset();
                    return false;
                }
            }
        } catch (IOException e) {
            return true;
        }
    } eof {
        if(lenbuf == -1)return true;
        int lptr = ptrbuf;
        while(lptr < lenbuf)if(!isSpaceChar(inbuf[lptr++]))return false;

        try {
            is.mark(1000);
            while(true){
                int b = is.read();
                if(b == -1){
                    is.reset();
                    return true;
                }else if(!isSpaceChar(b)){
                    is.reset();
                    return false;
                }
            }
        } catch (IOException e) {
            return true;
        }
    } if(lenbuf == -1)return true; lenbuf == -1 lenbuf -1 1 return true; true int lptr = ptrbuf; lptr ptrbuf while(lptr < lenbuf)if(!isSpaceChar(inbuf[lptr++]))return false; lptr < lenbuf lptr lenbuf if(!isSpaceChar(inbuf[lptr++]))return false; !isSpaceChar(inbuf[lptr++]) isSpaceChar(inbuf[lptr++]) isSpaceChar inbuf[lptr++] inbuf lptr++ lptr return false; false try {
            is.mark(1000);
            while(true){
                int b = is.read();
                if(b == -1){
                    is.reset();
                    return true;
                }else if(!isSpaceChar(b)){
                    is.reset();
                    return false;
                }
            }
        } catch (IOException e) {
            return true;
        } catch (IOException e) {
            return true;
        } IOException e {
            return true;
        } return true; true {
            is.mark(1000);
            while(true){
                int b = is.read();
                if(b == -1){
                    is.reset();
                    return true;
                }else if(!isSpaceChar(b)){
                    is.reset();
                    return false;
                }
            }
        } is.mark(1000) is.mark is 1000 while(true){
                int b = is.read();
                if(b == -1){
                    is.reset();
                    return true;
                }else if(!isSpaceChar(b)){
                    is.reset();
                    return false;
                }
            } true {
                int b = is.read();
                if(b == -1){
                    is.reset();
                    return true;
                }else if(!isSpaceChar(b)){
                    is.reset();
                    return false;
                }
            } int b = is.read(); b is.read() is.read is if(b == -1){
                    is.reset();
                    return true;
                }else if(!isSpaceChar(b)){
                    is.reset();
                    return false;
                } b == -1 b -1 1 {
                    is.reset();
                    return true;
                } is.reset() is.reset is return true; true if(!isSpaceChar(b)){
                    is.reset();
                    return false;
                } !isSpaceChar(b) isSpaceChar(b) isSpaceChar b {
                    is.reset();
                    return false;
                } is.reset() is.reset is return false; false private static int readByte()
    {
        if(lenbuf == -1)throw new InputMismatchException();
        if(ptrbuf >= lenbuf){
            ptrbuf = 0;
            try { lenbuf = is.read(inbuf); } catch (IOException e) { throw new InputMismatchException(); }
            if(lenbuf <= 0)return -1;
        }
        return inbuf[ptrbuf++];
    } readByte {
        if(lenbuf == -1)throw new InputMismatchException();
        if(ptrbuf >= lenbuf){
            ptrbuf = 0;
            try { lenbuf = is.read(inbuf); } catch (IOException e) { throw new InputMismatchException(); }
            if(lenbuf <= 0)return -1;
        }
        return inbuf[ptrbuf++];
    } if(lenbuf == -1)throw new InputMismatchException(); lenbuf == -1 lenbuf -1 1 throw new InputMismatchException(); new InputMismatchException() if(ptrbuf >= lenbuf){
            ptrbuf = 0;
            try { lenbuf = is.read(inbuf); } catch (IOException e) { throw new InputMismatchException(); }
            if(lenbuf <= 0)return -1;
        } ptrbuf >= lenbuf ptrbuf lenbuf {
            ptrbuf = 0;
            try { lenbuf = is.read(inbuf); } catch (IOException e) { throw new InputMismatchException(); }
            if(lenbuf <= 0)return -1;
        } ptrbuf = 0 ptrbuf 0 try { lenbuf = is.read(inbuf); } catch (IOException e) { throw new InputMismatchException(); } catch (IOException e) { throw new InputMismatchException(); } IOException e { throw new InputMismatchException(); } throw new InputMismatchException(); new InputMismatchException() { lenbuf = is.read(inbuf); } lenbuf = is.read(inbuf) lenbuf is.read(inbuf) is.read is inbuf if(lenbuf <= 0)return -1; lenbuf <= 0 lenbuf 0 return -1; -1 1 return inbuf[ptrbuf++]; inbuf[ptrbuf++] inbuf ptrbuf++ ptrbuf private static boolean isSpaceChar(int c) { return !(c >= 33 && c <= 126); } isSpaceChar { return !(c >= 33 && c <= 126); } return !(c >= 33 && c <= 126); !(c >= 33 && c <= 126) (c >= 33 && c <= 126) c >= 33 c 33 c <= 126 c 126 int c c private static int skip() { int b; while((b = readByte()) != -1 && isSpaceChar(b)); return b; } skip { int b; while((b = readByte()) != -1 && isSpaceChar(b)); return b; } int b; b while((b = readByte()) != -1 && isSpaceChar(b)); (b = readByte()) != -1 && isSpaceChar(b) (b = readByte()) != -1 (b = readByte()) b readByte() readByte -1 1 isSpaceChar(b) isSpaceChar b return b; b private static double nd() { return Double.parseDouble(ns()); } nd { return Double.parseDouble(ns()); } return Double.parseDouble(ns()); Double.parseDouble(ns()) Double.parseDouble Double ns() ns private static char nc() { return (char)skip(); } nc { return (char)skip(); } return (char)skip(); (char)skip() skip private static String ns()
    {
        int b = skip();
        StringBuilder sb = new StringBuilder();
        while(!(isSpaceChar(b))){
            sb.appendCodePoint(b);
            b = readByte();
        }
        return sb.toString();
    } ns {
        int b = skip();
        StringBuilder sb = new StringBuilder();
        while(!(isSpaceChar(b))){
            sb.appendCodePoint(b);
            b = readByte();
        }
        return sb.toString();
    } int b = skip(); b skip() skip StringBuilder sb = new StringBuilder(); sb new StringBuilder() while(!(isSpaceChar(b))){
            sb.appendCodePoint(b);
            b = readByte();
        } !(isSpaceChar(b)) (isSpaceChar(b)) isSpaceChar b {
            sb.appendCodePoint(b);
            b = readByte();
        } sb.appendCodePoint(b) sb.appendCodePoint sb b b = readByte() b readByte() readByte return sb.toString(); sb.toString() sb.toString sb private static char[] ns(int n)
    {
        char[] buf = new char[n];
        int b = skip(), p = 0;
        while(p < n && !(isSpaceChar(b))){
            buf[p++] = (char)b;
            b = readByte();
        }
        return n == p ? buf : Arrays.copyOf(buf, p);
    } ns {
        char[] buf = new char[n];
        int b = skip(), p = 0;
        while(p < n && !(isSpaceChar(b))){
            buf[p++] = (char)b;
            b = readByte();
        }
        return n == p ? buf : Arrays.copyOf(buf, p);
    } char[] buf = new char[n]; buf new char[n] n int b = skip() b skip() skip p = 0; p 0 while(p < n && !(isSpaceChar(b))){
            buf[p++] = (char)b;
            b = readByte();
        } p < n && !(isSpaceChar(b)) p < n p n !(isSpaceChar(b)) (isSpaceChar(b)) isSpaceChar b {
            buf[p++] = (char)b;
            b = readByte();
        } buf[p++] = (char)b buf[p++] buf p++ p (char)b b = readByte() b readByte() readByte return n == p ? buf : Arrays.copyOf(buf, p); n == p ? buf : Arrays.copyOf(buf, p) n == p n p buf Arrays.copyOf(buf, p) Arrays.copyOf Arrays buf p int n n private static char[][] nm(int n, int m)
    {
        char[][] map = new char[n][];
        for(int i = 0;i < n;i++)map[i] = ns(m);
        return map;
    } nm {
        char[][] map = new char[n][];
        for(int i = 0;i < n;i++)map[i] = ns(m);
        return map;
    } char[][] map = new char[n][]; map new char[n][] n for(int i = 0;i < n;i++)map[i] = ns(m); int i = 0; int i = 0; i 0 i < n i n i++ i++ i map[i] = ns(m); map[i] = ns(m) map[i] map i ns(m) ns m return map; map int n n int m m private static int[] na(int n)
    {
        int[] a = new int[n];
        for(int i = 0;i < n;i++)a[i] = ni();
        return a;
    } na {
        int[] a = new int[n];
        for(int i = 0;i < n;i++)a[i] = ni();
        return a;
    } int[] a = new int[n]; a new int[n] n for(int i = 0;i < n;i++)a[i] = ni(); int i = 0; int i = 0; i 0 i < n i n i++ i++ i a[i] = ni(); a[i] = ni() a[i] a i ni() ni return a; a int n n private static int ni()
    {
        int num = 0, b;
        boolean minus = false;
        while((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-'));
        if(b == '-'){
            minus = true;
            b = readByte();
        }

        while(true){
            if(b >= '0' && b <= '9'){
                num = num * 10 + (b - '0');
            }else{
                return minus ? -num : num;
            }
            b = readByte();
        }
    } ni {
        int num = 0, b;
        boolean minus = false;
        while((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-'));
        if(b == '-'){
            minus = true;
            b = readByte();
        }

        while(true){
            if(b >= '0' && b <= '9'){
                num = num * 10 + (b - '0');
            }else{
                return minus ? -num : num;
            }
            b = readByte();
        }
    } int num = 0 num 0 b; b boolean minus = false; minus false while((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-')); (b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-') (b = readByte()) != -1 (b = readByte()) b readByte() readByte -1 1 !((b >= '0' && b <= '9') || b == '-') ((b >= '0' && b <= '9') || b == '-') (b >= '0' && b <= '9') b >= '0' b '0' b <= '9' b '9' b == '-' b '-' if(b == '-'){
            minus = true;
            b = readByte();
        } b == '-' b '-' {
            minus = true;
            b = readByte();
        } minus = true minus true b = readByte() b readByte() readByte while(true){
            if(b >= '0' && b <= '9'){
                num = num * 10 + (b - '0');
            }else{
                return minus ? -num : num;
            }
            b = readByte();
        } true {
            if(b >= '0' && b <= '9'){
                num = num * 10 + (b - '0');
            }else{
                return minus ? -num : num;
            }
            b = readByte();
        } if(b >= '0' && b <= '9'){
                num = num * 10 + (b - '0');
            }else{
                return minus ? -num : num;
            } b >= '0' && b <= '9' b >= '0' b '0' b <= '9' b '9' {
                num = num * 10 + (b - '0');
            } num = num * 10 + (b - '0') num num * 10 + (b - '0') num * 10 num 10 (b - '0') b '0' {
                return minus ? -num : num;
            } return minus ? -num : num; minus ? -num : num minus -num num num b = readByte() b readByte() readByte private static long nl()
    {
        long num = 0;
        int b;
        boolean minus = false;
        while((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-'));
        if(b == '-'){
            minus = true;
            b = readByte();
        }

        while(true){
            if(b >= '0' && b <= '9'){
                num = num * 10 + (b - '0');
            }else{
                return minus ? -num : num;
            }
            b = readByte();
        }
    } nl {
        long num = 0;
        int b;
        boolean minus = false;
        while((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-'));
        if(b == '-'){
            minus = true;
            b = readByte();
        }

        while(true){
            if(b >= '0' && b <= '9'){
                num = num * 10 + (b - '0');
            }else{
                return minus ? -num : num;
            }
            b = readByte();
        }
    } long num = 0; num 0 int b; b boolean minus = false; minus false while((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-')); (b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-') (b = readByte()) != -1 (b = readByte()) b readByte() readByte -1 1 !((b >= '0' && b <= '9') || b == '-') ((b >= '0' && b <= '9') || b == '-') (b >= '0' && b <= '9') b >= '0' b '0' b <= '9' b '9' b == '-' b '-' if(b == '-'){
            minus = true;
            b = readByte();
        } b == '-' b '-' {
            minus = true;
            b = readByte();
        } minus = true minus true b = readByte() b readByte() readByte while(true){
            if(b >= '0' && b <= '9'){
                num = num * 10 + (b - '0');
            }else{
                return minus ? -num : num;
            }
            b = readByte();
        } true {
            if(b >= '0' && b <= '9'){
                num = num * 10 + (b - '0');
            }else{
                return minus ? -num : num;
            }
            b = readByte();
        } if(b >= '0' && b <= '9'){
                num = num * 10 + (b - '0');
            }else{
                return minus ? -num : num;
            } b >= '0' && b <= '9' b >= '0' b '0' b <= '9' b '9' {
                num = num * 10 + (b - '0');
            } num = num * 10 + (b - '0') num num * 10 + (b - '0') num * 10 num 10 (b - '0') b '0' {
                return minus ? -num : num;
            } return minus ? -num : num; minus ? -num : num minus -num num num b = readByte() b readByte() readByte private static void tr(Object... o) { if(INPUT.length() != 0)System.out.println(Arrays.deepToString(o)); } tr { if(INPUT.length() != 0)System.out.println(Arrays.deepToString(o)); } if(INPUT.length() != 0)System.out.println(Arrays.deepToString(o)); INPUT.length() != 0 INPUT.length() INPUT.length INPUT 0 System.out.println(Arrays.deepToString(o)) System.out.println System.out System System.out Arrays.deepToString(o) Arrays.deepToString Arrays o Object... o o public class Main {
    static InputStream is;
    static PrintWriter out;
    static String INPUT = "";

    static void solve()
    {
        Map<Character, Queue<Character>> map = new HashMap<>();
        Queue<Character> a = new LinkedList<>();
        Queue<Character> b = new LinkedList<>();
        Queue<Character> c = new LinkedList<>();

        map.put('a', a);
        map.put('b', b);
        map.put('c', c);

        String SA = ns();
        String SB = ns();
        String SC = ns();

        for (int i = 0; i < SA.length(); i++) {
            a.add(SA.charAt(i));
        }

        for (int i = 0; i < SB.length(); i++) {
            b.add(SB.charAt(i));
        }

        for (int i = 0; i < SC.length(); i++) {
            c.add(SC.charAt(i));
        }

        char lead = 'a';
        while (map.get(lead).size() != 0) {
            char card = map.get(lead).poll();
            lead = card;
        }
        System.out.println(Character.toUpperCase(lead));
    }

    public static void main(String[] args) throws Exception
    {
        long S = System.currentTimeMillis();
        is = INPUT.isEmpty() ? System.in : new ByteArrayInputStream(INPUT.getBytes());
        out = new PrintWriter(System.out);

        solve();
        out.flush();
        long G = System.currentTimeMillis();
        tr(G-S+"ms");
    }

    private static boolean eof()
    {
        if(lenbuf == -1)return true;
        int lptr = ptrbuf;
        while(lptr < lenbuf)if(!isSpaceChar(inbuf[lptr++]))return false;

        try {
            is.mark(1000);
            while(true){
                int b = is.read();
                if(b == -1){
                    is.reset();
                    return true;
                }else if(!isSpaceChar(b)){
                    is.reset();
                    return false;
                }
            }
        } catch (IOException e) {
            return true;
        }
    }

    private static byte[] inbuf = new byte[1024];
    static int lenbuf = 0, ptrbuf = 0;

    private static int readByte()
    {
        if(lenbuf == -1)throw new InputMismatchException();
        if(ptrbuf >= lenbuf){
            ptrbuf = 0;
            try { lenbuf = is.read(inbuf); } catch (IOException e) { throw new InputMismatchException(); }
            if(lenbuf <= 0)return -1;
        }
        return inbuf[ptrbuf++];
    }

    private static boolean isSpaceChar(int c) { return !(c >= 33 && c <= 126); }

    private static int skip() { int b; while((b = readByte()) != -1 && isSpaceChar(b)); return b; }

    private static double nd() { return Double.parseDouble(ns()); }
    private static char nc() { return (char)skip(); }

    private static String ns()
    {
        int b = skip();
        StringBuilder sb = new StringBuilder();
        while(!(isSpaceChar(b))){
            sb.appendCodePoint(b);
            b = readByte();
        }
        return sb.toString();
    }

    private static char[] ns(int n)
    {
        char[] buf = new char[n];
        int b = skip(), p = 0;
        while(p < n && !(isSpaceChar(b))){
            buf[p++] = (char)b;
            b = readByte();
        }
        return n == p ? buf : Arrays.copyOf(buf, p);
    }

    private static char[][] nm(int n, int m)
    {
        char[][] map = new char[n][];
        for(int i = 0;i < n;i++)map[i] = ns(m);
        return map;
    }

    private static int[] na(int n)
    {
        int[] a = new int[n];
        for(int i = 0;i < n;i++)a[i] = ni();
        return a;
    }

    private static int ni()
    {
        int num = 0, b;
        boolean minus = false;
        while((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-'));
        if(b == '-'){
            minus = true;
            b = readByte();
        }

        while(true){
            if(b >= '0' && b <= '9'){
                num = num * 10 + (b - '0');
            }else{
                return minus ? -num : num;
            }
            b = readByte();
        }
    }

    private static long nl()
    {
        long num = 0;
        int b;
        boolean minus = false;
        while((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-'));
        if(b == '-'){
            minus = true;
            b = readByte();
        }

        while(true){
            if(b >= '0' && b <= '9'){
                num = num * 10 + (b - '0');
            }else{
                return minus ? -num : num;
            }
            b = readByte();
        }
    }

    private static void tr(Object... o) { if(INPUT.length() != 0)System.out.println(Arrays.deepToString(o)); }
} public class Main {
    static InputStream is;
    static PrintWriter out;
    static String INPUT = "";

    static void solve()
    {
        Map<Character, Queue<Character>> map = new HashMap<>();
        Queue<Character> a = new LinkedList<>();
        Queue<Character> b = new LinkedList<>();
        Queue<Character> c = new LinkedList<>();

        map.put('a', a);
        map.put('b', b);
        map.put('c', c);

        String SA = ns();
        String SB = ns();
        String SC = ns();

        for (int i = 0; i < SA.length(); i++) {
            a.add(SA.charAt(i));
        }

        for (int i = 0; i < SB.length(); i++) {
            b.add(SB.charAt(i));
        }

        for (int i = 0; i < SC.length(); i++) {
            c.add(SC.charAt(i));
        }

        char lead = 'a';
        while (map.get(lead).size() != 0) {
            char card = map.get(lead).poll();
            lead = card;
        }
        System.out.println(Character.toUpperCase(lead));
    }

    public static void main(String[] args) throws Exception
    {
        long S = System.currentTimeMillis();
        is = INPUT.isEmpty() ? System.in : new ByteArrayInputStream(INPUT.getBytes());
        out = new PrintWriter(System.out);

        solve();
        out.flush();
        long G = System.currentTimeMillis();
        tr(G-S+"ms");
    }

    private static boolean eof()
    {
        if(lenbuf == -1)return true;
        int lptr = ptrbuf;
        while(lptr < lenbuf)if(!isSpaceChar(inbuf[lptr++]))return false;

        try {
            is.mark(1000);
            while(true){
                int b = is.read();
                if(b == -1){
                    is.reset();
                    return true;
                }else if(!isSpaceChar(b)){
                    is.reset();
                    return false;
                }
            }
        } catch (IOException e) {
            return true;
        }
    }

    private static byte[] inbuf = new byte[1024];
    static int lenbuf = 0, ptrbuf = 0;

    private static int readByte()
    {
        if(lenbuf == -1)throw new InputMismatchException();
        if(ptrbuf >= lenbuf){
            ptrbuf = 0;
            try { lenbuf = is.read(inbuf); } catch (IOException e) { throw new InputMismatchException(); }
            if(lenbuf <= 0)return -1;
        }
        return inbuf[ptrbuf++];
    }

    private static boolean isSpaceChar(int c) { return !(c >= 33 && c <= 126); }

    private static int skip() { int b; while((b = readByte()) != -1 && isSpaceChar(b)); return b; }

    private static double nd() { return Double.parseDouble(ns()); }
    private static char nc() { return (char)skip(); }

    private static String ns()
    {
        int b = skip();
        StringBuilder sb = new StringBuilder();
        while(!(isSpaceChar(b))){
            sb.appendCodePoint(b);
            b = readByte();
        }
        return sb.toString();
    }

    private static char[] ns(int n)
    {
        char[] buf = new char[n];
        int b = skip(), p = 0;
        while(p < n && !(isSpaceChar(b))){
            buf[p++] = (char)b;
            b = readByte();
        }
        return n == p ? buf : Arrays.copyOf(buf, p);
    }

    private static char[][] nm(int n, int m)
    {
        char[][] map = new char[n][];
        for(int i = 0;i < n;i++)map[i] = ns(m);
        return map;
    }

    private static int[] na(int n)
    {
        int[] a = new int[n];
        for(int i = 0;i < n;i++)a[i] = ni();
        return a;
    }

    private static int ni()
    {
        int num = 0, b;
        boolean minus = false;
        while((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-'));
        if(b == '-'){
            minus = true;
            b = readByte();
        }

        while(true){
            if(b >= '0' && b <= '9'){
                num = num * 10 + (b - '0');
            }else{
                return minus ? -num : num;
            }
            b = readByte();
        }
    }

    private static long nl()
    {
        long num = 0;
        int b;
        boolean minus = false;
        while((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-'));
        if(b == '-'){
            minus = true;
            b = readByte();
        }

        while(true){
            if(b >= '0' && b <= '9'){
                num = num * 10 + (b - '0');
            }else{
                return minus ? -num : num;
            }
            b = readByte();
        }
    }

    private static void tr(Object... o) { if(INPUT.length() != 0)System.out.println(Arrays.deepToString(o)); }
} Main
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.*;

public class Main {
    static InputStream is;
    static PrintWriter out;
    static String INPUT = "";

    static void solve()
    {
        Map<Character, Queue<Character>> map = new HashMap<>();
        Queue<Character> a = new LinkedList<>();
        Queue<Character> b = new LinkedList<>();
        Queue<Character> c = new LinkedList<>();

        map.put('a', a);
        map.put('b', b);
        map.put('c', c);

        String SA = ns();
        String SB = ns();
        String SC = ns();

        for (int i = 0; i < SA.length(); i++) {
            a.add(SA.charAt(i));
        }

        for (int i = 0; i < SB.length(); i++) {
            b.add(SB.charAt(i));
        }

        for (int i = 0; i < SC.length(); i++) {
            c.add(SC.charAt(i));
        }

        char lead = 'a';
        while (map.get(lead).size() != 0) {
            char card = map.get(lead).poll();
            lead = card;
        }
        System.out.println(Character.toUpperCase(lead));
    }

    public static void main(String[] args) throws Exception
    {
        long S = System.currentTimeMillis();
        is = INPUT.isEmpty() ? System.in : new ByteArrayInputStream(INPUT.getBytes());
        out = new PrintWriter(System.out);

        solve();
        out.flush();
        long G = System.currentTimeMillis();
        tr(G-S+"ms");
    }

    private static boolean eof()
    {
        if(lenbuf == -1)return true;
        int lptr = ptrbuf;
        while(lptr < lenbuf)if(!isSpaceChar(inbuf[lptr++]))return false;

        try {
            is.mark(1000);
            while(true){
                int b = is.read();
                if(b == -1){
                    is.reset();
                    return true;
                }else if(!isSpaceChar(b)){
                    is.reset();
                    return false;
                }
            }
        } catch (IOException e) {
            return true;
        }
    }

    private static byte[] inbuf = new byte[1024];
    static int lenbuf = 0, ptrbuf = 0;

    private static int readByte()
    {
        if(lenbuf == -1)throw new InputMismatchException();
        if(ptrbuf >= lenbuf){
            ptrbuf = 0;
            try { lenbuf = is.read(inbuf); } catch (IOException e) { throw new InputMismatchException(); }
            if(lenbuf <= 0)return -1;
        }
        return inbuf[ptrbuf++];
    }

    private static boolean isSpaceChar(int c) { return !(c >= 33 && c <= 126); }

    private static int skip() { int b; while((b = readByte()) != -1 && isSpaceChar(b)); return b; }

    private static double nd() { return Double.parseDouble(ns()); }
    private static char nc() { return (char)skip(); }

    private static String ns()
    {
        int b = skip();
        StringBuilder sb = new StringBuilder();
        while(!(isSpaceChar(b))){
            sb.appendCodePoint(b);
            b = readByte();
        }
        return sb.toString();
    }

    private static char[] ns(int n)
    {
        char[] buf = new char[n];
        int b = skip(), p = 0;
        while(p < n && !(isSpaceChar(b))){
            buf[p++] = (char)b;
            b = readByte();
        }
        return n == p ? buf : Arrays.copyOf(buf, p);
    }

    private static char[][] nm(int n, int m)
    {
        char[][] map = new char[n][];
        for(int i = 0;i < n;i++)map[i] = ns(m);
        return map;
    }

    private static int[] na(int n)
    {
        int[] a = new int[n];
        for(int i = 0;i < n;i++)a[i] = ni();
        return a;
    }

    private static int ni()
    {
        int num = 0, b;
        boolean minus = false;
        while((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-'));
        if(b == '-'){
            minus = true;
            b = readByte();
        }

        while(true){
            if(b >= '0' && b <= '9'){
                num = num * 10 + (b - '0');
            }else{
                return minus ? -num : num;
            }
            b = readByte();
        }
    }

    private static long nl()
    {
        long num = 0;
        int b;
        boolean minus = false;
        while((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-'));
        if(b == '-'){
            minus = true;
            b = readByte();
        }

        while(true){
            if(b >= '0' && b <= '9'){
                num = num * 10 + (b - '0');
            }else{
                return minus ? -num : num;
            }
            b = readByte();
        }
    }

    private static void tr(Object... o) { if(INPUT.length() != 0)System.out.println(Arrays.deepToString(o)); }
}

