import java.io.*;

public class Main {

	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		String str = br.readLine();

		// 文字列を分割する
		// 4文字の前提
		char[] c = new char[4];

		for (int i = 0; i < 4; i++) {
			c[i] = str.charAt(i);
		}

		// 組み合わせを調べる
		int[] x = { 0, 0, 0, 0 };

		for (int i = 0; i < 4; i++) {
			for (int j = 0; j < 4; j++) {
				if (i != j) {
					if (c[i] == c[j]) {
						x[i]++;
					}
				}
			}
		}

		// 全て他の1つの文字と同じ値であればOKそれ以外はNG
		boolean chk = true;

		for (int i = 0; i < 4; i++) {
			if (x[i] != 1) {
				chk = false;
			}
		}

		// 結果出力
		if (chk) {
			System.out.println("Yes");
		} else {
			System.out.println("No");
		}

	}

} import java.io.*; io.* java public class Main {

	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		String str = br.readLine();

		// 文字列を分割する
		// 4文字の前提
		char[] c = new char[4];

		for (int i = 0; i < 4; i++) {
			c[i] = str.charAt(i);
		}

		// 組み合わせを調べる
		int[] x = { 0, 0, 0, 0 };

		for (int i = 0; i < 4; i++) {
			for (int j = 0; j < 4; j++) {
				if (i != j) {
					if (c[i] == c[j]) {
						x[i]++;
					}
				}
			}
		}

		// 全て他の1つの文字と同じ値であればOKそれ以外はNG
		boolean chk = true;

		for (int i = 0; i < 4; i++) {
			if (x[i] != 1) {
				chk = false;
			}
		}

		// 結果出力
		if (chk) {
			System.out.println("Yes");
		} else {
			System.out.println("No");
		}

	}

} Main public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		String str = br.readLine();

		// 文字列を分割する
		// 4文字の前提
		char[] c = new char[4];

		for (int i = 0; i < 4; i++) {
			c[i] = str.charAt(i);
		}

		// 組み合わせを調べる
		int[] x = { 0, 0, 0, 0 };

		for (int i = 0; i < 4; i++) {
			for (int j = 0; j < 4; j++) {
				if (i != j) {
					if (c[i] == c[j]) {
						x[i]++;
					}
				}
			}
		}

		// 全て他の1つの文字と同じ値であればOKそれ以外はNG
		boolean chk = true;

		for (int i = 0; i < 4; i++) {
			if (x[i] != 1) {
				chk = false;
			}
		}

		// 結果出力
		if (chk) {
			System.out.println("Yes");
		} else {
			System.out.println("No");
		}

	} main {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		String str = br.readLine();

		// 文字列を分割する
		// 4文字の前提
		char[] c = new char[4];

		for (int i = 0; i < 4; i++) {
			c[i] = str.charAt(i);
		}

		// 組み合わせを調べる
		int[] x = { 0, 0, 0, 0 };

		for (int i = 0; i < 4; i++) {
			for (int j = 0; j < 4; j++) {
				if (i != j) {
					if (c[i] == c[j]) {
						x[i]++;
					}
				}
			}
		}

		// 全て他の1つの文字と同じ値であればOKそれ以外はNG
		boolean chk = true;

		for (int i = 0; i < 4; i++) {
			if (x[i] != 1) {
				chk = false;
			}
		}

		// 結果出力
		if (chk) {
			System.out.println("Yes");
		} else {
			System.out.println("No");
		}

	} BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); br new BufferedReader(new InputStreamReader(System.in)) String str = br.readLine(); str br.readLine() br.readLine br char[] c = new char[4]; c new char[4] 4 for (int i = 0; i < 4; i++) {
			c[i] = str.charAt(i);
		} int i = 0; int i = 0; i 0 i < 4 i 4 i++ i++ i {
			c[i] = str.charAt(i);
		} {
			c[i] = str.charAt(i);
		} c[i] = str.charAt(i) c[i] c i str.charAt(i) str.charAt str i int[] x = { 0, 0, 0, 0 }; x { 0, 0, 0, 0 } 0 0 0 0 for (int i = 0; i < 4; i++) {
			for (int j = 0; j < 4; j++) {
				if (i != j) {
					if (c[i] == c[j]) {
						x[i]++;
					}
				}
			}
		} int i = 0; int i = 0; i 0 i < 4 i 4 i++ i++ i {
			for (int j = 0; j < 4; j++) {
				if (i != j) {
					if (c[i] == c[j]) {
						x[i]++;
					}
				}
			}
		} {
			for (int j = 0; j < 4; j++) {
				if (i != j) {
					if (c[i] == c[j]) {
						x[i]++;
					}
				}
			}
		} for (int j = 0; j < 4; j++) {
				if (i != j) {
					if (c[i] == c[j]) {
						x[i]++;
					}
				}
			} int j = 0; int j = 0; j 0 j < 4 j 4 j++ j++ j {
				if (i != j) {
					if (c[i] == c[j]) {
						x[i]++;
					}
				}
			} {
				if (i != j) {
					if (c[i] == c[j]) {
						x[i]++;
					}
				}
			} if (i != j) {
					if (c[i] == c[j]) {
						x[i]++;
					}
				} i != j i j {
					if (c[i] == c[j]) {
						x[i]++;
					}
				} if (c[i] == c[j]) {
						x[i]++;
					} c[i] == c[j] c[i] c i c[j] c j {
						x[i]++;
					} x[i]++ x[i] x i boolean chk = true; chk true for (int i = 0; i < 4; i++) {
			if (x[i] != 1) {
				chk = false;
			}
		} int i = 0; int i = 0; i 0 i < 4 i 4 i++ i++ i {
			if (x[i] != 1) {
				chk = false;
			}
		} {
			if (x[i] != 1) {
				chk = false;
			}
		} if (x[i] != 1) {
				chk = false;
			} x[i] != 1 x[i] x i 1 {
				chk = false;
			} chk = false chk false if (chk) {
			System.out.println("Yes");
		} else {
			System.out.println("No");
		} chk {
			System.out.println("Yes");
		} System.out.println("Yes") System.out.println System.out System System.out "Yes" {
			System.out.println("No");
		} System.out.println("No") System.out.println System.out System System.out "No" String[] args args public class Main {

	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		String str = br.readLine();

		// 文字列を分割する
		// 4文字の前提
		char[] c = new char[4];

		for (int i = 0; i < 4; i++) {
			c[i] = str.charAt(i);
		}

		// 組み合わせを調べる
		int[] x = { 0, 0, 0, 0 };

		for (int i = 0; i < 4; i++) {
			for (int j = 0; j < 4; j++) {
				if (i != j) {
					if (c[i] == c[j]) {
						x[i]++;
					}
				}
			}
		}

		// 全て他の1つの文字と同じ値であればOKそれ以外はNG
		boolean chk = true;

		for (int i = 0; i < 4; i++) {
			if (x[i] != 1) {
				chk = false;
			}
		}

		// 結果出力
		if (chk) {
			System.out.println("Yes");
		} else {
			System.out.println("No");
		}

	}

} public class Main {

	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		String str = br.readLine();

		// 文字列を分割する
		// 4文字の前提
		char[] c = new char[4];

		for (int i = 0; i < 4; i++) {
			c[i] = str.charAt(i);
		}

		// 組み合わせを調べる
		int[] x = { 0, 0, 0, 0 };

		for (int i = 0; i < 4; i++) {
			for (int j = 0; j < 4; j++) {
				if (i != j) {
					if (c[i] == c[j]) {
						x[i]++;
					}
				}
			}
		}

		// 全て他の1つの文字と同じ値であればOKそれ以外はNG
		boolean chk = true;

		for (int i = 0; i < 4; i++) {
			if (x[i] != 1) {
				chk = false;
			}
		}

		// 結果出力
		if (chk) {
			System.out.println("Yes");
		} else {
			System.out.println("No");
		}

	}

} Main
import java.io.*;

public class Main {

	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		String str = br.readLine();

		// 文字列を分割する
		// 4文字の前提
		char[] c = new char[4];

		for (int i = 0; i < 4; i++) {
			c[i] = str.charAt(i);
		}

		// 組み合わせを調べる
		int[] x = { 0, 0, 0, 0 };

		for (int i = 0; i < 4; i++) {
			for (int j = 0; j < 4; j++) {
				if (i != j) {
					if (c[i] == c[j]) {
						x[i]++;
					}
				}
			}
		}

		// 全て他の1つの文字と同じ値であればOKそれ以外はNG
		boolean chk = true;

		for (int i = 0; i < 4; i++) {
			if (x[i] != 1) {
				chk = false;
			}
		}

		// 結果出力
		if (chk) {
			System.out.println("Yes");
		} else {
			System.out.println("No");
		}

	}

}
