:- prompt(_, '').
:- use_module(library(readutil)).
main:-
% Aqeel Alsadiq
% CSCI 305 Lab 4
% M is mother of C if she is a parent of C and if she is female
mother(M,C):- parent(M,C), female(M).
% F is father of C if he is a parent of C and if he is male
father(F,C):- parent(F,C), male(F).
% 2 people are spouses iff they are married to each other
% spouse(x, y) = spouse(y, x)
spouse(X,Z):- married(X,Z); married(Z, X).
% X has a child Y iff Y has a parent X
% We need to protect against the reflective case
child(X, Y):- parent(Y, X), X\=Y.
% Y is a son of X if he is a child of X and male
son(X, Y):- child(X, Y), male(X).
% Y is a daughter of X if she is a child of X and female
daughter(X, Y):- child(X, Y), female(X).
% 2 can share siblings if they share a parent and are not themselves
sibling(X, Y):- child(X, P), child(Y, P), X\=Y.
% Specifying what gender of siblings they have
brother(X, Y):- sibling(X, Y), male(X).
sister(X, Y):- sibling(X, Y), female(X).
% Y has a grand parent X iff P has a child X and Y has a child P
grandparent(X, Y):- child(X, P), child(P, Y).
% Grandfather case:
grandfather(X, Y):- child(X, P), child(P, Y), male(X).
% Grandmother case:
grandmother(X, Y):- child(X, P), child(P, Y), female(X).
% Y is grandchild of X, X has a grandparent Y
grandchild(X, Y):- grandparent(Y, X).
% Y has an ancestor X if X is one of Y's parents, or if one of Y's
% parents has X as an ancestor
ancestor(X, Y):- parent(X, Y).
ancestor(X, Y):- parent(X, Z), ancestor(Z, Y).
% descendant is the inverse of ancestor
descendant(X, Y):- ancestor(Y, X).
% Y has an uncle iff X has parent P and Y is brother to P
% Uncle through blood:
uncle(X, Y):- child(X, P), brother(Y, P).
% Uncle through marriage:
uncle(X, Y):- child(X, P), spouse(Y, P), male(X).
% Y has an aunt iff X has parent P and Y is sister to P
% Aunt through blood:
aunt(X, Y):- child(X, P), sister(Y, P).
% Aunt through marriage:
aunt(X, Y):- child(X, P), spouse(Y, P), female(X).
% X is older than Y if X was born in year A,
% Y was born in year B, and A is greater then B
older(X, Y):- born(X, A), born(Y, B), A<B.
% X is younger than Y if X was born in year A,
% Y was born in year B, and A is less then B
younger(X, Y):- born(X, A), born(Y, B), A>B.
% if Y was born in year A, and regent X reigned from year M
% to N, then M is less than A, and N is greater than A.
% Y was born during the reign of regent X.
regentWhenBorn(X, Y):- born(Y, A), reigned(X, M, N), M<A, N>A.
cousin(X, Y) :-((uncle(Z, Y), parent_of(Z, X)));((aunt(Z, Y), parent_of(Z, X))).
process:-
/* your code goes here */
:- main.
Oi0gc2V0X3Byb2xvZ19mbGFnKHZlcmJvc2Usc2lsZW50KS4KOi0gcHJvbXB0KF8sICcnKS4KOi0gdXNlX21vZHVsZShsaWJyYXJ5KHJlYWR1dGlsKSkuCgptYWluOi0KJSBBcWVlbCBBbHNhZGlxCiUgQ1NDSSAzMDUgTGFiIDQKOi0gY29uc3VsdCgncm95YWwucHJvJykuCiUgTSBpcyBtb3RoZXIgb2YgQyBpZiBzaGUgaXMgYSBwYXJlbnQgb2YgQyBhbmQgaWYgc2hlIGlzIGZlbWFsZQptb3RoZXIoTSxDKTotIHBhcmVudChNLEMpLCBmZW1hbGUoTSkuIAolIEYgaXMgZmF0aGVyIG9mIEMgaWYgaGUgaXMgYSBwYXJlbnQgb2YgQyBhbmQgaWYgaGUgaXMgbWFsZQpmYXRoZXIoRixDKTotIHBhcmVudChGLEMpLCBtYWxlKEYpLiAKJSAyIHBlb3BsZSBhcmUgc3BvdXNlcyBpZmYgdGhleSBhcmUgbWFycmllZCB0byBlYWNoIG90aGVyCiUgc3BvdXNlKHgsIHkpID0gc3BvdXNlKHksIHgpCnNwb3VzZShYLFopOi0gbWFycmllZChYLFopOyBtYXJyaWVkKFosIFgpLgolIFggaGFzIGEgY2hpbGQgWSBpZmYgWSBoYXMgYSBwYXJlbnQgWAolIFdlIG5lZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IHRoZSByZWZsZWN0aXZlIGNhc2UKY2hpbGQoWCwgWSk6LSBwYXJlbnQoWSwgWCksIFhcPVkuCiUgWSBpcyBhIHNvbiBvZiBYIGlmIGhlIGlzIGEgY2hpbGQgb2YgWCBhbmQgbWFsZQpzb24oWCwgWSk6LSBjaGlsZChYLCBZKSwgbWFsZShYKS4KJSBZIGlzIGEgZGF1Z2h0ZXIgb2YgWCBpZiBzaGUgaXMgYSBjaGlsZCBvZiBYIGFuZCBmZW1hbGUKZGF1Z2h0ZXIoWCwgWSk6LSBjaGlsZChYLCBZKSwgZmVtYWxlKFgpLgolIDIgY2FuIHNoYXJlIHNpYmxpbmdzIGlmIHRoZXkgc2hhcmUgYSBwYXJlbnQgYW5kIGFyZSBub3QgdGhlbXNlbHZlcwpzaWJsaW5nKFgsIFkpOi0gY2hpbGQoWCwgUCksIGNoaWxkKFksIFApLCBYXD1ZLgolIFNwZWNpZnlpbmcgd2hhdCBnZW5kZXIgb2Ygc2libGluZ3MgdGhleSBoYXZlCmJyb3RoZXIoWCwgWSk6LSBzaWJsaW5nKFgsIFkpLCBtYWxlKFgpLgpzaXN0ZXIoWCwgWSk6LSBzaWJsaW5nKFgsIFkpLCBmZW1hbGUoWCkuCiUgWSBoYXMgYSBncmFuZCBwYXJlbnQgWCBpZmYgUCBoYXMgYSBjaGlsZCBYIGFuZCBZIGhhcyBhIGNoaWxkIFAKZ3JhbmRwYXJlbnQoWCwgWSk6LSBjaGlsZChYLCBQKSwgY2hpbGQoUCwgWSkuCiUgR3JhbmRmYXRoZXIgY2FzZToKZ3JhbmRmYXRoZXIoWCwgWSk6LSBjaGlsZChYLCBQKSwgY2hpbGQoUCwgWSksIG1hbGUoWCkuCiUgR3JhbmRtb3RoZXIgY2FzZToKZ3JhbmRtb3RoZXIoWCwgWSk6LSBjaGlsZChYLCBQKSwgY2hpbGQoUCwgWSksIGZlbWFsZShYKS4KJSBZIGlzIGdyYW5kY2hpbGQgb2YgWCwgWCBoYXMgYSBncmFuZHBhcmVudCBZCmdyYW5kY2hpbGQoWCwgWSk6LSBncmFuZHBhcmVudChZLCBYKS4KJSBZIGhhcyBhbiBhbmNlc3RvciBYIGlmIFggaXMgb25lIG9mIFkncyBwYXJlbnRzLCBvciBpZiBvbmUgb2YgWSdzCiUgcGFyZW50cyBoYXMgWCBhcyBhbiBhbmNlc3RvcgphbmNlc3RvcihYLCBZKTotIHBhcmVudChYLCBZKS4KYW5jZXN0b3IoWCwgWSk6LSBwYXJlbnQoWCwgWiksIGFuY2VzdG9yKFosIFkpLgolIGRlc2NlbmRhbnQgaXMgdGhlIGludmVyc2Ugb2YgYW5jZXN0b3IKZGVzY2VuZGFudChYLCBZKTotIGFuY2VzdG9yKFksIFgpLgolIFkgaGFzIGFuIHVuY2xlIGlmZiBYIGhhcyBwYXJlbnQgUCBhbmQgWSBpcyBicm90aGVyIHRvIFAKJSBVbmNsZSB0aHJvdWdoIGJsb29kOgp1bmNsZShYLCBZKTotIGNoaWxkKFgsIFApLCBicm90aGVyKFksIFApLgolIFVuY2xlIHRocm91Z2ggbWFycmlhZ2U6CnVuY2xlKFgsIFkpOi0gY2hpbGQoWCwgUCksIHNwb3VzZShZLCBQKSwgbWFsZShYKS4KJSBZIGhhcyBhbiBhdW50IGlmZiBYIGhhcyBwYXJlbnQgUCBhbmQgWSBpcyBzaXN0ZXIgdG8gUAolIEF1bnQgdGhyb3VnaCBibG9vZDoKYXVudChYLCBZKTotIGNoaWxkKFgsIFApLCBzaXN0ZXIoWSwgUCkuCiUgQXVudCB0aHJvdWdoIG1hcnJpYWdlOgphdW50KFgsIFkpOi0gY2hpbGQoWCwgUCksIHNwb3VzZShZLCBQKSwgZmVtYWxlKFgpLgolIFggaXMgb2xkZXIgdGhhbiBZIGlmIFggd2FzIGJvcm4gaW4geWVhciBBLAolIFkgd2FzIGJvcm4gaW4geWVhciBCLCBhbmQgQSBpcyBncmVhdGVyIHRoZW4gQgpvbGRlcihYLCBZKTotIGJvcm4oWCwgQSksIGJvcm4oWSwgQiksIEE8Qi4KJSBYIGlzIHlvdW5nZXIgdGhhbiBZIGlmIFggd2FzIGJvcm4gaW4geWVhciBBLAolIFkgd2FzIGJvcm4gaW4geWVhciBCLCBhbmQgQSBpcyBsZXNzIHRoZW4gQgp5b3VuZ2VyKFgsIFkpOi0gYm9ybihYLCBBKSwgYm9ybihZLCBCKSwgQT5CLgolIGlmIFkgd2FzIGJvcm4gaW4geWVhciBBLCBhbmQgcmVnZW50IFggcmVpZ25lZCBmcm9tIHllYXIgTQolIHRvIE4sIHRoZW4gTSBpcyBsZXNzIHRoYW4gQSwgYW5kIE4gaXMgZ3JlYXRlciB0aGFuIEEuCiUgWSB3YXMgYm9ybiBkdXJpbmcgdGhlIHJlaWduIG9mIHJlZ2VudCBYLgpyZWdlbnRXaGVuQm9ybihYLCBZKTotIGJvcm4oWSwgQSksIHJlaWduZWQoWCwgTSwgTiksIE08QSwgTj5BLgpjb3VzaW4oWCwgWSkgOi0oKHVuY2xlKFosIFkpLCBwYXJlbnRfb2YoWiwgWCkpKTsoKGF1bnQoWiwgWSksIHBhcmVudF9vZihaLCBYKSkpLgpwcm9jZXNzOi0KCS8qIHlvdXIgY29kZSBnb2VzIGhlcmUgKi8KCXRydWUuCgo6LSBtYWluLg==