
#include <iostream>
#include <map>
#include <string>
#include <vector>

using namespace std;


/*
	樹構造を作りたい
	深さと管理番号をインデックスとする
	→内容を示す
*/

struct node{
	int indx;				//管理番号
	string post;			//ポスト内容
	vector< int > chnode;	//子ノードのインデックス
	int pnode;				//親ノードのインデックス
	bool flg;
};

void output( vector<node> *tree, int indx, int depth ) {
	string s = "";
	for(int i = 0; i < depth; i++)
		s += ".";

	if( !tree -> at(indx).flg )
		cout << s << tree->at(indx).post << endl;

	tree -> at(indx).flg = true;

	if( tree->at(indx).chnode.size() > 0 ) {
		for(int i = 0; i < tree->at(indx).chnode.size(); i++) {
			output( tree, tree->at(indx).chnode[i], depth+1);
		}
	}
}

int main(void){
	//FILE* fp_in = freopen("data.txt", "r", stdin);
	int n;
	cin >> n;
	
	vector< node > nlist;

	for(int i = 0; i < n; i++) {
		int k;
		string M;
		cin >> k >> M;

		node newnode;
		newnode.indx = i;
		newnode.post = M;
		newnode.pnode = k - 1;
		newnode.flg = false;

		if( k > 0 )
			nlist[k - 1].chnode.push_back( i );

		nlist.push_back( newnode );
	}

	output( &nlist, 0, 0 );
	//while(1){}

    return 0;
}