CRSCNTRY - Cross-country


Agness, a student of computer science, is very keen on cross­country running, and she participates in races organised every Saturday in a big park. Each of the participants obtains a route card, which specifies a sequence of checkpoints, which they need to visit in the given order. Agness is a very atractive girl, and a number of male runners have asked her for a date. She would like to choose one of them during the race. Thus she invited all her admirers to the park on Saturday and let the race decide. The winner would be the one, who scores the maximum number of points. Agnes came up with the following rules:

  • a runner scores one point if he meets Agnes at the checkpoint,
  • if a runner scored a point at the checkpoint, then he cannot get another point unless he and Agnes move to the next checkpoints specified in their cards.
  • route specified by the card may cross the same checkpoint more than once,
  • each competitor must strictly follow race instructions written on his card.

Between two consecutive meetings, the girl and the competitors may visit any number of checkpoints. The boys will be really doing their best, so you may assume, that each of them will be able to visit any number of checkpoints whilst Agnes runs between two consecutive ones on her route.

Task

Write a program which for each data set from a sequence of several data sets:

  • reads in the contents of Agnes' race card and contents of race cards presented to Tom,
  • computes the greatest number of times Tom is able to meet Agnes during the race,
  • writes it to output.

Input

There is one integer d in the first line of the input file, 1 <= d <= 10. This is the number of data sets. The data sets follow. Each data set consists of a number of lines, with the first one specifying the route in Agnes' race card. Consecutive lines contain routes on cards presented to Tom. At least one route is presented to Tom. The route is given as a sequence of integers from interval [1, 1000] separated by single spaces. Number 0 stands for the end of the route, though when it is placed at the beginning of the line it means the end of data set. There are at least two and at most 2000 checkpoints in a race card.

Output

The i-th line of the output file should contain one integer. That integer should equal the greatest number of times Tom is able to meet with Agnes for race cards given in the i-th data set.

Example

Sample input:
3
1 2 3 4 5 6 7 8 9 0
1 3 8 2 0
2 5 7 8 9 0
1 1 1 1 1 1 2 3 0
1 3 1 3 5 7 8 9 3 4 0
1 2 35 0
0
1 3 5 7 0
3 7 5 1 0
0
1 2 1 1 0
1 1 1 0
0

Sample output:
6
2
3

hide comments
ankan1006: 2021-06-11 18:04:33

AC in the first attempt!
Really easy if you know Dynamic Programming

Last edit: 2021-06-11 18:05:03
lakshya1st: 2020-08-28 22:24:06

SImple LCS implementation DP :)

robosapien: 2020-06-02 00:54:09

Tricky input part..
But first AC in one go DP problem :)

aryan__0406: 2020-05-14 18:41:35

recursion with memoization- 0.03
tabulation- 0.00

Last edit: 2020-05-16 23:41:03
asifalim: 2020-05-13 22:51:15

simply lcs ac in first attempt though input little bit confusing

amansahu112: 2020-05-01 13:12:06

BASIC LCS.. weird i/p format

cpp219: 2020-01-24 11:28:18

input format is really confusing

abhaypatro: 2019-08-14 05:42:13

First DP problem.
AC IN ONE GO :)

a_coder_hack: 2019-08-01 19:04:17

Why the constraint of no. of race card is not provided??

scolar_fuad: 2019-06-26 07:57:30

SImple LIS problem using dp with memorization


Added by:adrian
Date:2004-06-08
Time limit:5s
Source limit:50000B
Memory limit:1536MB
Cluster: Cube (Intel G860)
Languages:All
Resource:III Polish Collegiate Team Programming Contest (AMPPZ), 1998