class Person {
    String name;
    int id;
}

class Dept { }

class Faculty extends Person { }

class Student extends Person {
    Dept major;

    int numTaking; 
    Course[] taking; 

    int numTaken; 
    TranscriptEntry[] transcript; 

    Student(String n, int ssn, Dept m) {
	name = n;
	id = ssn;
	major = m;
	numTaking = numTaken = 0;
	taking = new Course[3];
	transcript = new TranscriptEntry[30];
    }
}

class Course {
    Dept major;
    Faculty teacher;

    int numEnrolled;
    Student[] enrolled; 

    int numWaiting;
    Student[] waiting; 

    Course(Dept d, Faculty t, int limit) {
	major = d;
	teacher = t;
	numEnrolled = numWaiting = 0;
	enrolled  = new Student[limit];
	waiting  = new Student[limit];
    }

    void addCourse(Student s) {
	if (major != s.major) return;
	if (numEnrolled < enrolled.length-1) {
	    enrolled[numEnrolled++] = s;
	    s.taking[s.numTaking++] = this;
	} else if (numWaiting < waiting.length-1) {
	    waiting[numWaiting++] = s;
	} 
    }

    void finishCourse() {
	for (int i = 0; i<numEnrolled; i++) {
	    Student s = enrolled[i];
	    s.transcript[s.numTaken++] = new TranscriptEntry(this, 'A');
	} 
	numEnrolled = 0;
	numWaiting = 0;
    }
}

class TranscriptEntry {
    Course course;
    char grade; 

    TranscriptEntry(Course c, char g) { course = c; grade = g; }
}
