function [EtoE, EtoF] = Connectivity1D()

Globals1D;

face_def = [1; 2];

spFtoV = sparse(N_faces * K,N_v); % matice Nfaces*K x N_v ukazujici, ktere uzly site tvori hranice
face = 1;
for i = 1:K
	for j = 1:N_faces
		spFtoV(face,E(face_def(j,:),i)) = 1;
		face = face + 1;
	end
end

spFtoF = spFtoV * spFtoV' - speye(N_faces * K); % matice Nfaces*K x Nfaces*K ukazujici, ktere hranice na sebe navazuji

[faces1,faces2] = find(spFtoF == 1); % odpovidajici prvky faces1 a faces2 rikaji, ktera hrana prileha na kterou hranu v globalni siti

% potrebujeme cisla 1:K; napr 1,2,3 patri elementu 1 atd
element1 = floor((faces1 - 1) / N_faces) + 1;
element2 = floor((faces2 - 1) / N_faces) + 1;
% potrebujeme cisla 1,2; napr 15 je 1 (z globalni site na referencni element)
face1 = mod(faces1 - 1,N_faces) + 1;
face2 = mod(faces2 - 1,N_faces) + 1;

% inicializace polie EtoE a EtoF jako kdyby byly vsechny elementy rozpojeny
EtoE = ((1:K)') * ones(1,N_faces);
EtoF = ones(K,1) * (1:N_faces);

indexes = sub2ind([K, N_faces],element1,face1);
EtoE(indexes) = element2;
EtoF(indexes) = face2;

%EtoF = sparse(K,N_faces * K); % matice K x Nfaces*K ukazujici, na ktere hranice navazuji elementy
%for i = 1:K
%	EtoF(i,:) = FtoF((i - 1) * N_faces + 1,:) + FtoF(i * N_faces,:);
%end
%
%EtoE = sparse(K,K); % matice K x K ukazujici, jak jsou na sebe navazany elementy
%for i = 1:K
%	for j = 1:K
%		if (max(EtoF(i,((j - 1) * N_faces + 1):(j * N_faces))) > 0)
%			EtoE(i,j) = 1;
%		end
%	end
%end

end