import static java.lang.System.out;
import java.io.*;

public class LAMatif{
	String[] himpunanA = new String[100];
	String[] himpunanB = new String[100];
	String[] himpunanHasil = new String[100];
	int jumlahAnggotaA;
	int jumlahAnggotaB;
	int jumlahRelasi;
	
	private String bacaKey(){
		Console konsol = System.console();
		return konsol.readLine();
	}
	
	public void inputAnggota(){
		out.print("Masukkan Jumlah Anggota Himpunan : ");
		jumlahAnggotaA = Integer.parseInt(bacaKey());
		
		out.println("Anggota Himpunan A");
			for (int i=1; i<=jumlahAnggotaA; i++){
				out.print("Anggota "+i+" : ");
				himpunanA[i] = bacaKey();
			}
			
		out.print("Masukkan Jumlah Anggota B : ");
		jumlahAnggotaB = Integer.parseInt(bacaKey());
		
		out.println("Anggota Himpunan B");
			for(int i=1; i<=jumlahAnggotaB; i++){
				out.print("Anggota "+i+" : ");
				himpunanB[i] = bacaKey();
			}
	}
	public void inputRelasi(){
		int jmlRelasiMaks = jumlahAnggotaA*jumlahAnggotaB;
		out.println("Banyak Relasi Maksimal yang Terjadi Adalah : "+jmlRelasiMaks);
		
		do{
			out.print("Masukkan Jumlah Relasi terjadi : ");
			jumlahRelasi = Integer.parseInt(bacaKey());
		}while(jumlahRelasi>jmlRelasiMaks);
		
		out.println("Masukkan Relasi yang terjadi : ");
		for(int i=1; i<=jumlahRelasi; i++){
			String temp[] = new String[100];
			String temp2[] = new String[100];
			boolean SamaA = false;
			boolean SamaB = false;
			
			out.println("Relasi ke "+i+" : ");
			do{
				out.print("Masukkan Asal A : ");
				temp[i] = bacaKey();
				out.print("Masukkan Tujuan B : ");
				temp2[i] = bacaKey();
				
				for(int j=1; j <=jumlahAnggotaA; j++){
					if(temp[i].equals(himpunanA[j])){
						SamaA=true;
				}
			}
				
				for (int k=1; k <=jumlahAnggotaB; k++){
					if(temp2[i].equals(himpunanB[k])){
						SamaB=true;
				}
			}
				if(SamaA==false || SamaB==false){
					out.println("Anggota Himpunan Tidak terdapat di Himpunan A atau B");
			}
				if(SamaA==true && SamaB==true){
					himpunanHasil[i] = temp2[i];
			}
			}while(SamaA==false || SamaB==false);
		}
	}
	public void cetakRelasi(){
		out.print("Daerah Domain = { ");
		for(int i=1; i<=jumlahAnggotaA; i++){
			out.print(himpunanA[i]+"  ");
		}
		out.println("}");
		
		out.print("Daerah Kodomain = { ");
		for(int i=1; i<=jumlahAnggotaB; i++){
			out.print(himpunanB[i]+"  ");
		}
		out.println("}");
		out.print("Daerah range adalah : { ");
		for(int i=1; i<=jumlahRelasi; i++){
			out.print(himpunanHasil[i]+"  ");
		}
		out.println("}");
	}
	
	public static void main(String args[]){
		LAMatif A = new LAMatif();
		A.inputAnggota();
		A.inputRelasi();
		A.cetakRelasi();
	}
}