#include "testlib.h"
#include <sstream>

using namespace std;

string ending(long long x)
{
    x %= 100;
    if (x / 10 == 1)
        return "th";
    if (x % 10 == 1)
        return "st";
    if (x % 10 == 2)
        return "nd";
    if (x % 10 == 3)
        return "rd";
    return "th";
}

string ltoa(long long n)
{
    stringstream ss;
    ss << n;
    string result;
    ss >> result;
    return result;
}

int main(int argc, char * argv[])
{
    setName("compare ordered sequences of signed int%d numbers", 8 * sizeof(long long));

    registerTestlibCmd(argc, argv);

    int n = 0;
    
    string firstElems;

    while (!ans.seekEof() && !ouf.seekEof())
    {
      n++;
      long long j = ans.readLong();
      long long p = ouf.readLong();
      if (j != p)
        quitf(_wa, "%d%s numbers differ - expected: '%s', found: '%s'", n, ending(n).c_str(), ltoa(j).c_str(), ltoa(p).c_str());
      else
        if (n <= 5)
        {
            if (firstElems.length() > 0)
                firstElems += " ";
            firstElems += ltoa(j);
        }
    }

    int extraInAnsCount = 0;

    while (!ans.seekEof())
    {
        ans.readLong();
        extraInAnsCount++;
    }
    
    int extraInOufCount = 0;

    while (!ouf.seekEof())
    {
        ouf.readLong();
        extraInOufCount++;
    }

    if (extraInAnsCount > 0)
        quitf(_wa, "Answer contains longer sequence [length = %d], but output contains %d elements", n + extraInAnsCount, n);
    
    if (extraInOufCount > 0)
        quitf(_wa, "Output contains longer sequence [length = %d], but answer contains %d elements", n + extraInOufCount, n);
    
    if (n <= 5)
    {
        quitf(_ok, "%d number(s): \"%s\"", n, firstElems.c_str());
    }
    else
        quitf(_ok, "%d numbers", n);
}
