#include "libscl.h" 
using namespace scl; 
using namespace std;

int main(int argc, char** argp, char** envp)
{
  typedef vector<string>::const_iterator vitr;
  typedef map<int,string>::const_iterator mitr;

  ifstream fin;
  ofstream fout;
  string filename;

  filename = "msnbc990928.seq";
  fin.open(filename.c_str());
  if (!fin) error("Error, cannot open " + filename);

  string line;

  getline(fin,line);
  getline(fin,line);
  getline(fin,line);

  vector<string> page = cutstr(line,' ');
  int count = 0;
  for (vitr p=page.begin(); p!=page.end(); ++p) {
    cout << count++ << ' ' << *p << '\n';
  }
  page[8] = "news";
  page[12] = "sports";
  cout << '\n';
  count = 0;
  for (vitr p=page.begin(); p!=page.end(); ++p) {
    cout << count++ << ' ' << *p << '\n';
  }

  getline(fin,line);
  getline(fin,line);
  getline(fin,line);
  getline(fin,line);

  filename = "first.tab";
  fout.open(filename.c_str());
  if (!fout) error("Error, cannot open " + filename);

  while (getline(fin,line)) {
    string firstpage = cutstr(line);
    int i = atoi(firstpage.c_str()) - 1;
    fout << page[i] << '\n';
  }

  fin.clear();
  fin.close();
  filename = "msnbc990928.seq";
  fin.open(filename.c_str());
  if (!fin) error("Error, cannot open " + filename);

  getline(fin,line);
  getline(fin,line);
  getline(fin,line);
  getline(fin,line);
  getline(fin,line);
  getline(fin,line);
  getline(fin,line);

  fout.clear();
  fout.close();
        
  filename = "second.tab";
  fout.open(filename.c_str());
  if (!fout) error("Error, cannot open " + filename);

  while (getline(fin,line)) {
    vector<string> pagenumbers = cutstr(line,' ');
    if (pagenumbers.size() == 1) {
      vitr p = pagenumbers.begin();
      int i = atoi(p->c_str()) - 1;
      fout << page[i] << '\n';
    }
    else {
      vitr p = pagenumbers.begin();
      int i = atoi(p->c_str()) - 1;
      fout << page[i] << ' ';
      ++p;
      i = atoi(p->c_str()) - 1;
      fout << page[i] << "-2" << '\n';
    }
  }

  fout.clear();
  fout.close();
        
  fin.clear();
  fin.close();
  filename = "msnbc990928.seq";
  fin.open(filename.c_str());
  if (!fin) error("Error, cannot open " + filename);

  getline(fin,line);
  getline(fin,line);
  getline(fin,line);
  getline(fin,line);
  getline(fin,line);
  getline(fin,line);
  getline(fin,line);

  fout.clear();
  fout.close();
        
  filename = "third.tab";
  fout.open(filename.c_str());
  if (!fout) error("Error, cannot open " + filename);

  while (getline(fin,line)) {
    map<int,string> basket;
    vector<string> rec = cutstr(line,' ');
    vector<string> pagenumbers;
    vitr s = rec.begin(); 
    vitr p = s;
    pagenumbers.push_back(*s);
    while (++p != rec.end() && *p != *s) pagenumbers.push_back(*p);
    if (pagenumbers.size() == 1) {
      vitr p = pagenumbers.begin();
      int i = atoi(p->c_str()) - 1;
      fout << page[i] << '\n';
    }
    else {
      vitr p = pagenumbers.begin();
      int i = atoi(p->c_str()) - 1;
      fout << page[i] << ' ';
      ++p;
      i = atoi(p->c_str()) - 1;
      fout << page[i] << "-2" << '\n';
    }
  }
      
  return 0;
}
