Gale-Shapleyアルゴリズムを用いた安定結婚問題(安定マッチング)についての質問です。
このプログラムの人数を男女それぞれN人に拡張し、N組のカップルを作りたいのですが5人以上にする目処が立たなくて困っています。課題の期限が迫っていてたいへん焦っています。
以下のソースコードを書き換えてN組の安定マッチングが実現できるソースコードにしていただけ
環境はEclipseで、Java言語での記述です。
C言語のソースコード例は探せたのですが、力がなくJavaに書き換えることが上手くできませんでした。
すみません、よろしくお願い致します。

import java.util.Scanner;


/** Class GaleShapley **/
public class GaleShapley
{
  private int N, engagedCount;//プロポーズ回数
  private String[][] menPref;//男性の好み
  private String[][] womenPref;//女性の好み
  private String[] men;//男性
  private String[] women;//女性
  private String[] womenPartner;//女性のパートナー
  private boolean[] menEngaged;//男性の婚約者

  /** コンストラクタ **/
  public GaleShapley(String[] m, String[] w, String[][] mp, String[][] wp)
  {
    N = mp.length;//mp配列(menPref)の長さを取得
    engagedCount = 0;
    men = m;
    women = w;
    menPref = mp;
    womenPref = wp;
    menEngaged = new boolean[N];
    womenPartner = new String[N];
    calcMatches();
  }

  /** 全ての好みが一致するかの計算 **/
  private void calcMatches()
  {
  //プロポーズを男性の選好順序すべて終わるまで繰り返す
    while (engagedCount < N)
    {
      int free;
      //男性の選好順序すべて終わるまで繰り返す
      for (free = 0; free < N; free++)
      //もし、男性のプロポーズ回数が0でなければbreak
        if (!menEngaged[free])
          break;

      //男性の選好順序すべて終わり、かつ男性のプロポーズ回数がfree回でなければ繰り返す
      for (int i = 0; i < N && !menEngaged[free]; i++)
      {
        int index = womenIndexOf(menPref[free][i]);
        if (womenPartner[index] == null)
        {
          womenPartner[index] = men[free];
          menEngaged[free] = true;
          engagedCount++;
        }
        else
        {
          String currentPartner = womenPartner[index];
          if (morePreference(currentPartner, men[free], index))
          {
            womenPartner[index] = men[free];
            menEngaged[free] = true;
            menEngaged[menIndexOf(currentPartner)] = false;
          }
        }
      } 
    }
    printCouples();
  }

  /** 女性が現在のパートナーよりも新しいパートナーを好むかどうかをチェックする **/
  private boolean morePreference(String curPartner, String newPartner, int index)
  {
    for (int i = 0; i < N; i++)
    {
      //もし、新しい男性が女性の好みと一致したら:true
      if (womenPref[index][i].equals(newPartner))
        return true;
      //もし、現在の男性が女性の好みと一致したら:false
      if (womenPref[index][i].equals(curPartner))
        return false;
    }
    return false;
  }

  /** 男性の番号を取得 **/
  private int menIndexOf(String str)
  {
    for (int i = 0; i < N; i++)
    //もし、男性の名前がが与えられた文字列と一致したらiを返す
      if (men[i].equals(str))
        return i;
    //そうでなければ-1を返す
    return -1;
  }

  /** 女性の番号を取得 **/
  private int womenIndexOf(String str)
  {
    for (int i = 0; i < N; i++)
    //もし、女性の名前がが与えられた文字列と一致したらiを返す
      if (women[i].equals(str))
        return i;
    //そうでなければ-1を返す
    return -1;
  }

  /** 結果表示 **/
  public void printCouples()
  {
    System.out.println("カップルは以下の組で成立 ");
    for (int i = 0; i < N; i++)
    {
      System.out.println(womenPartner[i] +" "+ women[i]);
    }
  }

  /** main **/
  public static void main(String[] args) 
  {
    System.out.println("数値(n)を入力して下さい。");
    Scanner scan = new Scanner(System.in);

    int N = scan.nextInt();

    System.out.println("Gale Shapley Marriage Algorithm\n");
    /** 男性の要素 **/
    String[] m = {"M1", "M2", "M3", "M4", "M5"};
    /** 女性の要素 **/
    String[] w = {"W1", "W2", "W3", "W4", "W5"};

    /** 男性の選好順序 **/
    String[][] mp = {
      {"W5", "W2", "W3", "W4", "W1"}, 
      {"W2", "W5", "W1", "W3", "W4"}, 
      {"W4", "W3", "W2", "W1", "W5"}, 
      {"W1", "W2", "W3", "W4", "W5"},
      {"W5", "W2", "W3", "W4", "W1"}
    };

    /** 女性の選好順序 **/ 
    String[][] wp = {
      {"M5", "M3", "M4", "M1", "M2"}, 
      {"M1", "M2", "M3", "M5", "M4"}, 
      {"M4", "M5", "M3", "M2", "M1"},
      {"M5", "M2", "M1", "M4", "M3"}, 
      {"M2", "M1", "M4", "M3", "M5"}
    };

    GaleShapley gs = new GaleShapley(m, w, mp, wp); 
  }
}