Dijkstra
#include<bits/stdc++.h>
using namespace std;
const int N=1005,inf=2e9;
#define pii pair<int,int>
#define int long long
int s,t,n;
int cost,len;
int city[N];
struct Edge{
int to,value,pay;
};
vector<Edge>G[N];
int money[N],dis[N];
bool vis[N];
priority_queue<pii,vector<pii>,greater<pii> >Q;
signed main(){
cin.tie(0)->sync_with_stdio(0);
cin>>s>>t>>n;
for(int i=1;i<=n;i++){
cin>>cost>>len;
for(int j=1;j<=len;j++){
cin>>city[j];
}
for(int j=1;j<=len;j++){
for(int k=j+1;k<=len;k++){
G[city[j]].push_back({city[k],k-j,cost});
}
}
}
for(int i=1;i<=1000;i++){
dis[i]=money[i]=inf;
}
dis[s]=money[s]=0;
Q.push({0,s});
while(!Q.empty()){
int u=Q.top().second; Q.pop();
if(vis[u]){
continue;
}
vis[u]=1;
for(int i=0;i<G[u].size();i++){
int v=G[u][i].to,w=G[u][i].value,c=G[u][i].pay;
if(money[v]>money[u]+c){
dis[v]=dis[u]+w;
money[v]=money[u]+c;
Q.push({dis[v],v});
}
if(money[v]==money[u]+w&&dis[v]>dis[u]+c){
dis[v]=dis[u]+c;
Q.push({dis[v],v});
}
}
}
if(dis[t]==inf){
cout<<"-1 -1";
}
else{
cout<<money[t]<<" "<<dis[t];
}
return 0;
}