#include <bits/stdc++.h>
using
namespace
std;
vector<string> tokenize(string s, string del)
{
vector<string> res;
int
start, end = -1 * del.size();
do
{
start = end + del.size();
end = s.find(del, start);
res.push_back(s.substr(start, end - start));
}
while
(end != -1);
return
res;
}
int
comp(string s, string t)
{
vector<string> ss = tokenize(s,
"/"
);
vector<string> tt = tokenize(t,
"/"
);
int
date1[3];
int
date2[3];
for
(
int
i = 0; i < 3; i++) {
date1[i] = stoi(ss[i]);
date2[i] = stoi(tt[i]);
}
if
(date1[2] != date2[2]) {
return
date1[2] - date2[2];
}
else
if
(date1[1] != date2[1]) {
return
date1[1] - date2[1];
}
else
if
(date1[0] != date2[0]) {
return
date1[0] - date2[0];
}
return
0;
}
string nextClosestDate(vector<string> arr, string q)
{
sort(arr.begin(), arr.end(), comp);
int
l = 0, r = arr.size() - 1;
int
ind = -1;
while
(l <= r) {
int
m = (l + r) / 2;
int
c = comp(q, arr[m]);
if
(c == 0) {
ind = m;
break
;
}
else
if
(c < 0) {
r = m - 1;
ind = m;
}
else
{
l = m + 1;
}
}
if
(ind == -1) {
return
"-1"
;
}
else
{
return
arr[ind];
}
}
void
performQueries(vector<string> arr, vector<string> Q)
{
for
(
int
i = 0; i < Q.size(); i++) {
cout << nextClosestDate(arr, Q[i]) << endl;
}
}
int
main()
{
vector<string> arr = {
"22/4/1233"
,
"1/3/633"
,
"23/5/56645"
,
"4/12/233"
};
vector<string> Q
= {
"23/3/4345"
,
"4/4/34234234"
,
"12/3/2"
};
performQueries(arr, Q);
}