/*
* 边
* 终点、权值
* struct node{
* int v,w;
* }
* vector<node>e[100005]
* e[x][0].v e[x][0].w
* e[x][1].v e[x][1].w
*/
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6+5;
int n,m,q;
struct node {
int v,w;
};
vector<node>e[N];
int main() {
cin>>n>>m>>q;
for (int i=1;i<=m;i++) {
int x,y,z;
cin>>x>>y>>z;
e[x].push_back({y,z});
}
while (q--) {
int x;
cin>>x;
for (int i=e[x].size()-1;i>=0;i--) {
cout<<e[x][i].v<<' '<<e[x][i].w<<endl;
}
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
const int N = 105;
vector<int>e[N];
int n,m,book[N];
void dfs(int x) {
book[x] = 1;
for (int i=0;i<e[x].size();i++) {
int v = e[x][i];
if (book[v]==0) {
dfs(v);
}
}
}
int main() {
cin>>n;
for (int i=1;i<=n;i++) {
int x;
cin>>x;
x++;
e[i].push_back(x);
}
int cnt = 0;
for (int i=1;i<=n;i++) {
if (book[i]==0) {
dfs(i);
cnt++;
}
}
cout<<cnt<<endl;
return 0;
}