// stepping stone for final interface
import java.util.*;
// We follow the rule that all interfaces terminate in I.

interface InputInitialI {
  Set getPairs ();  // returns Set(PairI)
  // only pairs where fraction is positive are included
}

interface PairI {
  int getRelationNumber();
  double getFraction();
}

interface OutputI {
  double getMaxBias();
  Vector getPolynomial(); // returns Vector(double); 4 doubles
  // left most: highest degree (3)
  // right most: degree 0: constant of polynomial
}

interface InputUpdateI{
  Vector getPolynomialBefore();
  Set getAddedPairs(); // returns Set(PairI)
  Set getSubtractedPairs(); // returns Set(PairI)
  // only pairs where fraction is positive are included
}

// Sample use of interface:

// The home team sends an object ii satisfying interface InputInitialI
// to the outsourcing team. The outsourcing team does not know the
// internal representation of the object (it could use DemeterJ
// datastructures) but they know that getPairs returns a set of objects
// satisfying interface PairI.

// The outsourcing team sends back an object satisfying interface 
// OutputI. Again the home team does not know the internal representation
// the outsourcing team uses but they know that there is a method
// getMaxBias() to get back the maximum bias. Etc.

// For the update case, we use interface InputUpdateI for input to the
// outsourcing team and again OutputI for output from the outsourcing team.