오르다 군대
시간 제한1초메모리 제한1024 MB
1부터 N까지 번호가 붙은 병사들을 줄 세우는 경우 중 경호원 번호들이 가장 긴 증가 부분수열을 이루는 경우의 수를 구합니다.
문제
전투를 준비하면서 칸 기레이는 자신의 군대에 속한 모든 전사에게 1부터 까지의 자연수 번호를 붙였다. 전사들은 싸울 줄은 알지만 셀 줄은 몰라서, 한 줄로 설 때마다 순서가 임의로 정해진다.
줄에 서 있는 한 명 이상의 전사를 부대라고 부른다. 부대에 속한 전사들의 번호를 줄에 선 순서대로 읽었을 때 오름차순이 되면 그 부대를 올바른 부대라고 한다. 올바른 부대들 가운데 전사 수가 가장 많은 부대를 타격 부대라고 한다. 예를 들어 줄이 1 3 2 4이면 타격 부대는 1 3 4와 1 2 4이고, 1 4는 올바른 부대이지만 타격 부대는 아니다.
칸의 일부 전사는 칸의 개인 경호병이다.
경호병들이 타격 부대를 이루는 줄 세우기의 수를 구하는 프로그램을 작성하라.
입력
첫째 줄에 전체 전사 수를 나타내는 자연수 이 주어진다 (). 둘째 줄에는 경호병 수를 나타내는 자연수 가 주어진다 (). 셋째 줄에는 이하의 서로 다른 자연수 개가 오름차순으로 공백을 두고 주어진다. 이 번호들은 경호병들의 번호다.
출력
모든 전사를 한 줄로 세우는 서로 다른 방법 중에서, 어느 줄에서든 경호병들이 타격 부대를 이루는 방법의 수를 한 줄로 출력한다.
힌트
첫 번째 예제의 전사는 다섯 명이다. 타격 부대는 번호 1, 3, 4인 전사 세 명으로 구성되어야 한다. 이 조건을 만족하는 줄은 다음 11가지다: (1, 3, 2, 5, 4), (1, 3, 5, 2, 4), (1, 3, 5, 4, 2), (1, 5, 3, 2, 4), (1, 5, 3, 4, 2), (2, 1, 3, 5, 4), (2, 1, 5, 3, 4), (2, 5, 1, 3, 4), (5, 1, 3, 2, 4), (5, 1, 3, 4, 2), (5, 2, 1, 3, 4).